अपने इतिहास में एक भी कमांड को नहीं बचाने के लिए इसे एक स्थान के साथ ␣
पहले से चिह्नित करें ( यहाँ पर चिह्नित किया गया है):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
यह व्यवहार आपकी ~/.bashrc
फ़ाइल में, इस पंक्ति में सेट किया गया है :
HISTCONTROL=ignoreboth
man bash
कहते हैं:
HISTCONTROL
इतिहास सूची में आदेशों को सहेजने के तरीके को नियंत्रित करने वाले मूल्यों की एक बृहदान्त्र-पृथक सूची। यदि मानों की सूची में अज्ञानता शामिल है
, तो एक अंतरिक्ष चरित्र के साथ शुरू होने वाली लाइनें इतिहास सूची में सहेजी नहीं जाती हैं । नजरअंदाज किए गए मान के कारण पिछली इतिहास प्रविष्टि से मेल खाते हुए लाइनों को बचाया नहीं जा सकता है। का मान
ignoreboth के लिए आशुलिपि है ignorespace और ignoredups ।
ignoredups
वैसे, यही कारण है कि history | tail -n2
उपरोक्त परीक्षण में इतिहास में केवल एक बार दिखाई देता है।
एक टर्मिनल का इतिहास रैम में सहेजा जाता है और ~/.bash_history
जैसे ही आप टर्मिनल को बंद करते हैं, आपके पास फ्लश हो जाता है। यदि आप किसी विशिष्ट प्रविष्टि को अपने से हटाना चाहते ~/.bash_history
हैं, तो आप ऐसा कर सकते हैं sed
:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
पिछले एक में मैंने डिफ़ॉल्ट सीमांकक /
को बदल दिया _
क्योंकि यह खोज शब्द के अंदर उपयोग किया जाता है, वास्तव में यह इसके बराबर है sed -i '/\/path\//d' .bash_history
। यदि आदेश आउटपुट केवल लाइनों आप जोड़ना हटाना चाहते हैं -i
विकल्प और परिवर्तन !d
करने के लिए d
हटाए जाने के प्रदर्शन करने के लिए:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere