2011-06-25 16 views
53

कभी-कभी, जब मैं rm -rf XYZ जैसे कमांड चलाता हूं, तो मैं नहीं चाहता कि यह बैश इतिहास में दर्ज किया जाए, क्योंकि मैं गलती से उसी आदेश को reverse-i-search पर चला सकता हूं। क्या ऐसा होने से रोकने के लिए कोई अच्छा तरीका है?बैश इतिहास में कमांड को दिखाने के लिए कैसे रोकें?

+0

http://serverfault.com/questions/48769/avoid-to-keep-command पर -इन-इतिहास –

उत्तर

44

आप ignoreboth को HISTCONTROL वातावरण चर (जो आमतौर पर सेट किया जाता है) कर चुके हैं, एक प्रमुख अंतरिक्ष चरित्र के साथ आदेश इतिहास में संग्रहीत नहीं किया जाएगा (साथ ही डुप्लिकेट)।

उदाहरण के लिए:

$ HISTCONTROL=ignoreboth 
$ echo test1 
$ echo test2 
$ history | tail -n2 
1015 echo test1 
1016 history | tail -n2 

यहाँ man bash कहते है:

HISTCONTROL

को नियंत्रित कैसे आदेशों इतिहास सूची पर सहेजा गया है मूल्यों का पेट अलग की गई सूची। यदि मानों की सूची में ignorespace, लाइनें हैं जो स्पेस कैरेक्टर से शुरू होती हैं तो इतिहास सूची में सहेजी नहीं जाती हैं। ignoredups का मान पिछले इतिहास प्रविष्टि से मेल खाने वाली रेखाओं को सहेजा नहीं जा सकता है। ignoreboth का मान ignorespace और ignoredups के लिए लघुरूप है। erasedups का मान उस पंक्ति को सहेजने से पहले इतिहास सूची से हटाए जाने वाले मौजूदा लाइन से मेल खाने वाली सभी पिछली रेखाओं का कारण बनता है। उपर्युक्त सूची में कोई भी मूल्य अनदेखा नहीं किया जाता है। यदि HISTCONTROL अनसेट है, या वैध मान शामिल नहीं है, तो खोल पार्सर द्वारा पढ़ी गई सभी पंक्तियां इतिहास सूची पर सहेजी जाती हैं, HISTIGNORE के मान के अधीन। मल्टी-लाइन कंपाउंड कमांड की दूसरी और बाद की रेखाओं का परीक्षण नहीं किया जाता है, और HISTCONTROL के मूल्य के बावजूद इतिहास में जोड़ा जाता है।

यह भी देखें:

6

आप दो चीजों में से एक कर सकते हैं:

export HISTFILE=/dev/null 

या, एक स्थान के साथ आदेश शुरू करते हैं।

+4

उस भयानक –

+4

से पहले एक स्पेस हम में से कुछ सोचते हैं कि अंतरिक्ष द्वारा उपसर्ग किए गए ऑटो-अनदेखा करने वाले आदेश वास्तव में एक बुरा विचार है और इसलिए डिफ़ॉल्ट रूप से 'अनदेखा' सेट नहीं है। – Sorpigal

+0

'HISTFILE' सेट करना इस तरह से * किसी * इतिहास को संग्रहीत करता है, और कमांड को इन-मेमोरी इतिहास में जोड़ने से रोकता नहीं है। – chepner

17

यहां तक ​​कि HISTIGNORE का बेहतर उपयोग करें। यह आपको अनदेखा करने के लिए पैटर्न का एक सेट निर्दिष्ट करने की अनुमति देता है (जैसे rm)। बेहतर (मुझे लगता है) सभी इतिहास को केवल /dev/null

+0

आह हाँ, उस बारे में भूल गए :) –

+0

यह सही उत्तर +1 है – najjarammar

36

अपने .bashrc/.bash_profile/जहां भी आप चाहते हैं, export HISTIGNORE=' *' पर रखें। फिर बस एक ही आदेश शुरू करें जिसे आप एक स्थान से अनदेखा करना चाहते हैं।

$ ls # goes in history 
$ ls # does not 
+3

यह 'HISTCONTROL' पर्यावरण चर के मान पर निर्भर करता है, जिसमें अनिवार्य रूप से' अनदेखा 'सेट नहीं है। – Sorpigal

+2

यदि 'हिस्टकंट्रोल' में 'अनदेखा' है, तो वास्तव में 'HISTIGNORE' में '*' शामिल करने के लिए यह केवल अनावश्यक है। दोनों स्वतंत्र रूप से काम करते हैं। – chepner

1

या

unset HISTFILE 

(पिछले जवाब के समान ही कम: निर्यात HISTFILE =/dev/नल)

+0

यह केवल ऑन-डिस्क इतिहास को प्रभावित करता है, न कि स्मृति में इतिहास। – chepner

1

खोल स्टार्टअप पर, प्रविष्टियों से मैं स्पष्ट रूप से सफाई इतिहास है कि मैं वहां रहना नहीं चाहते हैं। उदाहरण के लिए, मैं नहीं चाहता कि इतिहास में किसी भी rm -rf यह आघात एक निर्देशिका रात भर संसाधित परिणाम का पूरा हटाने के बाद चाहते हैं (, बस एक ही Arrow-Up + Enter :)

मैं अपने init फ़ाइल में निम्न स्निपेट यहीं के साथ (काम करता है .zshrc साथ, यह भी .bashrc साथ काम करना चाहिए)

# ... 
HISTFILE=~/.zshhistory 
# ... 

# remove dangerous entries from the shell history 
temp_histfile="/tmp/$$.temp_histfile" 
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile 
mv $temp_histfile $HISTFILE 
संबंधित मुद्दे