बैश इतिहास से अंतिम एन लाइनें हटाएं


40

जब गलती से किसी फ़ाइल को खोल में चिपकाया जाता है, तो वह बैश इतिहास में एक टन बदसूरत बकवास प्रविष्टियां डालती है। क्या उन प्रविष्टियों को हटाने का एक साफ तरीका है? जाहिर है कि मैं खोल को बंद कर सकता हूं और .bash_historyफ़ाइल को मैन्युअल रूप से संपादित कर सकता हूं लेकिन हो सकता है कि वर्तमान शेल के इतिहास को संशोधित करने के लिए किसी प्रकार का एपीआई उपलब्ध हो?

जवाबों:


36

आप history -d offsetवर्तमान शेल के इतिहास से एक विशिष्ट लाइन को हटाने या history -cपूरे इतिहास को साफ़ करने के लिए बिलिन का उपयोग कर सकते हैं ।

यह वास्तव में व्यावहारिक नहीं है यदि आप लाइनों की एक सीमा को दूर करना चाहते हैं, क्योंकि यह केवल एक तर्क के रूप में एक ऑफसेट लेता है, लेकिन आप इसे लूप के साथ फ़ंक्शन में लपेट सकते हैं।

rmhist() {
    start=$1
    end=$2
    count=$(( end - start ))
    while [ $count -ge 0 ] ; do
        history -d $start
        ((count--))
    done
}

इसके साथ बुलाओ rmhist first_line_to_delete last_line_to_delete। (के उत्पादन के अनुसार लाइन संख्या history।)

( history -wइतिहास फ़ाइल में लिखने के लिए बाध्य करने के लिए उपयोग करें ।)


1
चूंकि ओपी ने एन अंतिम लाइनों को हटाने के लिए कहा था , इसलिए इस स्क्रिप्ट को कुछ ऐसा करके संशोधित किया जाना चाहिए: tot_lines=$(history | wc -l)और फिर दोहराएं history -d $(( tot_lines - $1 ))
प्लाज़्माबिन्टुरॉन्ग

2
इसके बजाय $(history | wc -l), चर $HISTCMDहै जिसका उपयोग किया जा सकता है।
प्लाज़्माबिन्टुरॉन्ग

29

बस कमांड प्रॉम्प्ट में यह एक लाइनर मदद करेगा।

for i in {1..N}; do history -d START_NUM; done

जहां START_NUM इतिहास में प्रविष्टि की स्थिति शुरू कर रहा है। एन प्रविष्टियों की संख्या है जिसे आप हटाना चाहते हैं।

उदाहरण के लिए: for i in {1..50}; do history -d 1030; done


3
मुझे आश्चर्य है कि यह पहले से निर्मित फ़ंक्शन क्यों नहीं है। 'इतिहास ’बहुत पुराना साधन है।
पेट्र ग्लैडिख

इस उद्देश्य को बहुत अच्छी तरह से पूरा करता है, लेकिन इस कमांड को इतिहास में देखा जा सकता है :)
राजीव अकोटकर

askubuntu.com/a/978276/22866 के पास इतिहास से "डिलीट हिस्ट्री कमांड" डिलीट करने का एक अच्छा तरीका है :-)
हान्सूलू

0

User2982704 द्वारा जवाब लगभग मेरे लिए काम किया लेकिन काफी नहीं। मुझे इस तरह एक छोटा बदलाव करना पड़ा।

मान लें कि मेरा इतिहास 1000 पर है और मैं अंतिम 50 प्रविष्टियों को हटाना चाहता हूं

start=1000

for i in {1..50}; do count=$((start-i)); history -d $count; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.