मैं कुछ कमांड निष्पादित करना चाहता हूं लेकिन उन्हें कमांड इतिहास में स्टोर नहीं करना चाहता। ताकि कोई भी इसे .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
में शामिल मूल्य की आवश्यकता है ।$HISTCONTROL
ignorespace
आपको बस चलाने की आवश्यकता है:
$ set +o history
अधिक देखने के लिए, दौड़ें:
$ man set
set -x history
बाद में जोड़ते हैं , तब तक यह काम करता है।