मैं कमांड को बैश इतिहास में दिखाने से कैसे रोकूँ?


93

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



हालांकि शेल स्क्रिप्ट लिखने के लिए उपयोग किया जा bash सकता है (इसलिए प्रोग्रामिंग), इसका विशेष रूप से इसका प्रोग्रामिंग से कोई लेना-देना नहीं है (इतिहास एक इंटरैक्टिव-केवल एक चीज है)। मतदान बंद
paxdiablo

जवाबों:


110

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

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

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

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

HISTCONTROL

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

यह सभी देखें:


51

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

$ ls  # goes in history
$  ls # does not

4
यह HISTCONTROLपर्यावरण चर के मूल्य पर निर्भर करता है , जो आवश्यक रूप से ignorespaceनिर्धारित नहीं है ।

3
यदि HISTCONTROLशामिल है ignorespace, तो यह वास्तव में केवल `*` को शामिल करने के लिए बेमानी है HISTIGNORE। दोनों स्वतंत्र रूप से काम करते हैं।
चेपनर

22

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


आह हाँ, उस एक के बारे में भूल गए :)
कोरी हेंडरसन

13
kill -9 $$

मुझे पता है कि पिछले उत्तरों के रूप में सबसे अच्छा नहीं है, लेकिन यह बिना किसी बचत के वर्तमान बैश शेल को मार देगा, उपयोगी जब HISTCONTROL डिफ़ॉल्ट रूप से सेट नहीं होता है, आप इसे सेट करना भूल गए, या शुद्ध और सरल आप एक अग्रणी स्थान डालना भूल गए। और आपने अभी कुछ पासवर्ड टाइप किए हैं और वे नहीं चाहते कि वे इतिहास में स्थायी रूप से बने रहें।

यह त्वरित तरीका है, और इतिहास फ़ाइल को मिटाने जैसा कुछ भी अच्छा नहीं है क्योंकि आपको इसे इतिहास बचत शेल के बाहर करने की आवश्यकता है (लॉग इन के रूप में अलग-अलग उपयोगकर्ता और su / sudo का उपयोग करें, एक पृष्ठभूमि नौकरी बनाना, आदि)


8

आप दो काम कर सकते हैं:

export HISTFILE=/dev/null

या, एक स्थान के साथ कमांड शुरू करें।


5
कि पहले एक रिक्ति ही कमाल का है
एरिक फोर्टिस

8
हम में से कुछ लोग सोचते हैं कि किसी स्थान से उपसर्गित ऑटो-इग्नोरिंग कमांड वास्तव में एक बुरा विचार है और इसलिए ignorespaceडिफ़ॉल्ट रूप से सेट नहीं होता है ।
सोर्निगल

3
HISTFILEइस तरह सेट करना किसी भी इतिहास को संग्रहीत करने से रोकता है , और कमांड को इन-मेमोरी इतिहास में जोड़े जाने से नहीं रोकता है।
Chepner

3

या

unset HISTFILE

(पिछले उत्तर के समान ही छोटा: निर्यात इतिहास = / देव / अशक्त)


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

2

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

मैंने अपनी इनिट फ़ाइल में निम्नलिखित स्निपेट डाल दिए (काम करता है .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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.