बैश इतिहास में "खतरनाक" कमांड लॉग करने से रोकने के लिए, मैंने अपनी .bashrc
फ़ाइल में निम्नलिखित पंक्ति जोड़ी है :
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
यह अच्छी तरह से काम करता है, लेकिन इसका एक साइड इफेक्ट है: मैं एक मशीन पर निष्पादित कमांड का पूरा इतिहास नहीं देख सकता। मान लीजिए कि मेरे पास प्रयोगों के लिए कई मशीनें हैं, और मैं सभी आदेशों को निष्पादित करने में सक्षम होना चाहता हूं। मैं history
मार डाला आंतरिक प्रदर्शित करने के लिए कमांड का उपयोग करेगा , और शायद आज की तारीख के लिए grep:
history | grep Sep-28
मुझे जो करना है वह "खतरनाक" कमांड को भी लॉग इन करना होगा, लेकिन #
लाइन की शुरुआत में डाल दें , ताकि अगर मैं गलती से कमांड को इतिहास से निष्पादित करने के लिए होता हूं, तो कोई नुकसान नहीं होगा।
मुझे पता नहीं है कि क्या यह संभव है।
अद्यतन और स्पष्टीकरण:
मेरे लिए एक समस्या यह है कि मुख्य कारण यह है कि मैं आमतौर पर कई टर्मिनलों से अपनी मशीन से जुड़ा हुआ हूं, और एक टर्मिनल पर निष्पादित किसी भी कमांड को तुरंत अन्य टर्मिनलों के इतिहास में पढ़ा जाता है। इससे हासिल होता है
PROMPT_COMMAND="history -a; history -c; history -r"
आइए कल्पना करें कि मेरे पास दो टर्मिनल खुले हैं। एक में मुझे कुछ cat /dev/foo > file.out
प्रक्रिया चल रही है। दूसरे में, मैं प्रगति की जांच करता हूं ls -lAhF
। मैं ls
दबाकर दोहराता रहता हूं ( Upऔर ENTERयह इतिहास से अंतिम आदेश है)। जैसे ही पहली कमांड खत्म होती है, इतिहास से अंतिम कमांड अब नहीं है ls
, लेकिन cat /dev/foo > file.out
। अगर मैं सावधान नहीं हूं, तो मैं फिर से बिल्ली शुरू कर दूंगा और file.out को अधिलेखित कर दूंगा।
मैं जो हासिल करना चाहूंगा वह यह है कि बिल्ली कमान के साथ पूर्ववर्ती होगी #
, ताकि इसे निष्पादित नहीं किया जाएगा। हालाँकि, मैं अभी भी इसे इतिहास में देखता हूँ और इसे अन-कमेंट करके इसे फिर से (यदि यह एक लंबी आज्ञा है) पुनः प्रयोग कर सकता है।
watch ls -lAhF
याwhile sleep 1; do ls -lAhf; done
; फ़ाइल का आकार देखने के बजाय, आपpv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ) का उपयोग कर सकते हैं ।