मैं कुछ कमांड निष्पादित करना चाहता हूं लेकिन उन्हें कमांड इतिहास में स्टोर नहीं करना चाहता। ताकि कोई भी इसे .bash_historyफाइल में सर्च नहीं कर सकेगा ।
क्या कोई तरीका है कि कैसे इस तरह से bash कमांड निष्पादित करें?
मैं कुछ कमांड निष्पादित करना चाहता हूं लेकिन उन्हें कमांड इतिहास में स्टोर नहीं करना चाहता। ताकि कोई भी इसे .bash_historyफाइल में सर्च नहीं कर सकेगा ।
क्या कोई तरीका है कि कैसे इस तरह से bash कमांड निष्पादित करें?
जवाबों:
एक स्थान के साथ अपनी कमान शुरू करें और इसे इतिहास में शामिल नहीं किया जाएगा।
ज्ञात हो कि इसके लिए पर्यावरण चर $HISTCONTROLको सेट करने की आवश्यकता होती है ।
जाँच करें कि निम्न आदेश देता है ignorespaceया
ignoreboth
#> echo $HISTCONTROLलापता होने पर पर्यावरण चर जोड़ने के लिए, निम्नलिखित लाइन को बैश प्रोफाइल में जोड़ा जा सकता है। उदाहरण के लिए%HOME/.bashrc
export HISTCONTROL=ignorespaceप्रोफ़ाइल सोर्स करने के बाद फिर से पूर्वनिर्धारित कमांड को नहीं लिखा जाएगा $HISTFILE
किसी भी बैश सत्र में, टाइप करके इतिहास फ़ाइल को / dev / null पर सेट करें:
export HISTFILE=/dev/null
ध्यान दें, जैसा कि टिप्पणियों में बताया गया है, यह इतिहास में उस सत्र में कोई आदेश नहीं लिखेगा!
बस अपने सिस्टम प्रशासक की कड़ी मेहनत के साथ गड़बड़ न करें, कृपया;)
डूडाड का समाधान अधिक सुरुचिपूर्ण है। बस चर को परेशान करें: unset HISTFILE(धन्यवाद!)
/dev/nullलॉगआउट पर 0600 पर सेट की जा रही अनुमतियों से संबंधित समस्याओं का कारण बना । इसके बजाय मैंने इस्तेमाल किया unset HISTFILE।
@ जॉन डोए & @ उपयोगकर्ता 3270492 के उत्तर का विस्तार। लेकिन, यह मेरे लिए काम करने लगता है।
<your_secret_command>; history -d $((HISTCMD-1))
आपको अपने इतिहास में कमांड की प्रविष्टि नहीं देखनी चाहिए।
यहाँ स्पष्टीकरण है ..
'इतिहास -d' इतिहास से उल्लिखित प्रविष्टि को हटा देता है।
HISTCMD अगले निष्पादित होने के लिए कमांड_नंबर को संग्रहीत करता है। तो, (HISTCMD-1) अंतिम निष्पादित कमांड को संदर्भित करता है।
आप इतिहास के बिना एक शेल का उपयोग करने पर विचार कर सकते हैं, जैसे शायद
/bin/sh << END
your commands without history
END
(शायद /bin/dashया /bin/sashअधिक से अधिक उपयुक्त हो सकता है /bin/sh)
या इससे भी बेहतर बैच उपयोगिता का उपयोग करें
batch << EOB
your commands
EOB
तब इतिहास समाहित होगा shया batchजो बहुत सार्थक नहीं है
आप अपना सत्र शुरू कर सकते हैं
export HISTFILE=/dev/null ;history -d $(history 1)
फिर अपने डरपोक कार्यों के साथ आगे बढ़ें। Histfile स्थापना करने के लिए /dev/nullइतिहास फाइल करने के लिए लॉग इन किया जाएगा, अभी तक इस प्रविष्टि आसानी से हटा दिया जाएगा और (इतिहास फ़ाइल में कम से कम) कोई निशान नहीं दिखाई जाएगी।
इसके अलावा, यह गैर-स्थायी है।
जैसा कि टिप्पणियों में डूडाड द्वारा उल्लेख किया गया है , unset HISTFILEयह अच्छी तरह से करता है, लेकिन अगर आप भी कुछ इतिहास हटाना चाहते हैं, तो echo $HISTFILEइतिहास फ़ाइल स्थान (आमतौर पर ~/.bash_history) प्राप्त करने के लिए unset HISTFILEकरें, और संपादित करें ~/.bash_history(या जो कुछ भी HISTFILEथा - बेशक यह अब unsetआप ऐसा कर सकते हैं ' t इसे पढ़ें)।
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
फिर आपने अपना इतिहास संपादित किया है, और यह तथ्य कि आपने इसे संपादित किया है!
unset HISTFILE; echo TEST; historyआपको echo TESTपिछले से लास्ट तक कमांड देगा । हालांकि सत्र को समाप्त करने और फिर से जोड़ने के बाद, इतिहास में वास्तव में यह प्रविष्टि नहीं है। इसलिए मैं कहूंगा कि यह काम करता है :)
unset HISTFILEस्मृति में इतिहास में दर्ज किए जा रहे आदेशों को रोकना प्रतीत नहीं होता है, लेकिन यह उन्हें जो भी फ़ाइल $ HISTFILE में दर्ज किया जा रहा है, उसे रोक देता है। इसलिए मुझे लगता है कि आपके पास अभी भी स्मृति में आपका स्थानीय इतिहास है, लेकिन यह अब एक फ़ाइल में दर्ज नहीं किया जा रहा है, जो कि आप चाहते हैं! ;)
आप निम्न कमांड का भी उपयोग कर सकते हैं:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
मुझे लगता है कि यह बहुत पोर्टेबल कमांड है।
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"और अब आप इसे कुछ इस तरह से कर सकते हैं:mysql -uroot -pSecretPassword ; forget
$sऔर अन्य चीजों के अर्थ में परिवर्तन करने के लिए आपको उपनाम के बजाय फ़ंक्शन बनाने की आवश्यकता है । function forget() { // put code here // }
यदि आप zsh का उपयोग कर रहे हैं तो आप चला सकते हैं:
setopt histignorespace
यह सेट होने के बाद, एक स्थान से शुरू होने वाले प्रत्येक कमांड को इतिहास से बाहर रखा जाएगा।
इसे चालू / बंद करने के लिए आप उपनाम का उपयोग कर सकते हैं :.zshrc
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
इसे प्राप्त करने के कई तरीके हैं। यह इतिहास फ़ाइल का आकार 0 पर सेट करता है:
export HISTFILESIZE=0
यह इतिहास फ़ाइल को /dev/nullप्रभावी रूप से अक्षम करने के लिए सेट करता है:
export HISTFILE=/dev/null
अलग-अलग कमांड के लिए, आप कमांड को एक स्थान के साथ उपसर्ग कर सकते हैं और इसे इतिहास फ़ाइल में सहेजा नहीं जाएगा। ध्यान दें कि इसके लिए आपको पर्यावरण चर (मैन बैश और अधिक विवरण के लिए खोज ) ignorespaceमें शामिल मूल्य की आवश्यकता है ।$HISTCONTROLignorespace
आपको बस चलाने की आवश्यकता है:
$ set +o history
अधिक देखने के लिए, दौड़ें:
$ man set
set -x historyबाद में जोड़ते हैं , तब तक यह काम करता है।