किसी दिए गए शेल पर bash_history को अस्थायी रूप से निलंबित करें?


114

क्या बैश में इतिहास ट्रैकिंग को अस्थायी रूप से निलंबित करने का एक तरीका है, ताकि "गुप्त" मोड में प्रवेश किया जा सके? मैं अपने टर्मिनल में सामान दर्ज कर रहा हूं जिसे मैं रिकॉर्ड नहीं करना चाहता, संवेदनशील वित्तीय जानकारी।

जवाबों:


153

यह वही होना चाहिए जो आप देख रहे हैं:

unset HISTFILE

से man bash

यदि HISTFILE परेशान है, या यदि इतिहास फ़ाइल अपरिहार्य है, तो इतिहास सहेजा नहीं गया है।

वैकल्पिक रूप से, यदि आप इसे बंद करना चाहते हैं और फिर से फिर से चालू करते हैं, तो इसका उपयोग करना आसान हो सकता है set:

बंद करें

set +o history

चालू करो

set -o history

11
HISTFILEबैश के बाहर निकलने पर केवल मूल्य की जाँच की जाती है, इसलिए पहला तरीका काम नहीं करता है (यदि आप मान को पुनर्स्थापित करते हैं, तो कमांड बच जाएगा)। set +o historyनिर्देशानुसार काम करता है।
गाइल्स

5
धन्यवाद, उत्कृष्ट। मैं इस्तेमाल करेंगे set +o historyऔर set -o history); आगे पीछे टॉगल करने के लिए जब मैं गुप्त सामान कर रहा हूँ
Naftuli Kay

1
unset HISTFILEकाम नहीं करता। set -/+o historyएक जादू की तरह काम करता है! धन्यवाद
kholofelo Maloma

4
एक टिप के रूप में यदि आप कमांड से पहले एक स्पेस डालते हैं (कमांड को स्पेस से शुरू करें) तो यह आपके इतिहास में रिकॉर्ड नहीं होगा, और अप / डाउन एरो कीज़ इसे भी नहीं दिखाएंगे।
महदी

1
केवल अनइंस्टॉल करने वाला HISTFILE मेमोरी में कमांड लिस्ट को मिटाता नहीं है ( historyइसे देखने की कोशिश करें)। यदि अतिरिक्त रूप से आप HISTSIZE=0सूची को मिटा देते हैं और कोई आदेश फ़ाइल में संग्रहीत नहीं किया जा सकता है (जैसा कि कोई आदेश याद नहीं है)।
इसहाक

33

बैश का उपयोग करना, सेट करना HISTCONTROL="ignorespace"और किसी भी कमांड के साथ पूर्ववर्ती करना जो आप इतिहास में दर्ज नहीं करना चाहते हैं। यदि आप कोई उपाय करना भूल गए हैं, तो history -d <number>एक विशिष्ट प्रविष्टि को हटाने या history -cपूरे कमांड इतिहास को साफ़ करने के लिए भी है।


27

सुनिश्चित करें कि HISTCONTROLशामिल हैं ignorespace। आप शायद अपने HISTCONTROL=ignorespace( HISTCONTROL=ignoredups:ignorespaceया कुछ) को जोड़ना चाहते हैं ~/.bashrc। फिर किसी भी कमांड लाइन जो एक स्थान से शुरू होती है, इतिहास से छोड़ी जाती है।

एक और संभावना एक नया बैश सत्र शुरू करने की है जो अपने इतिहास को नहीं बचाती है।

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

यदि आपको कई आदेशों को संग्रहीत करने से बचने की आवश्यकता है और आप अभी भी पिछले आदेशों तक पहुंचने के लिए तीर का उपयोग करना चाहते हैं, तो उपयोग करें:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

कमांड को कैसे संग्रहीत किया जाता है, इसे नियंत्रित करने के चार तरीके (स्तर) हैं।

  1. पहला और सबसे सरल उपयोग ignorespace(या उपेक्षा) है:

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

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

  2. फ़ाइल में कमांड दर्ज करने से बचें $HISTFILE:

    $ unset HISTFILE

    यदि कोई परेशान है, तो शेल से बाहर निकलने पर कमांड हिस्ट्री सेव नहीं होती है।

    अशक्त HISTFILE=''और / या HISTFILE=/dev/nullएक ही प्रभाव के लिए काम करता है। यह समझें कि कमांड अभी भी मेमोरी सूची में दर्ज किए जा रहे हैं, historyकमांड या अप ऐरो की कोशिश करें।

    चेतावनी: यदि शेल मौजूद होने से पहले HISTFILE को रीसेट किया जाता है, तो जो कुछ भी मेमोरी में दर्ज किया गया है, वह वैसे भी फ़ाइल में लिखा जा सकता है।

  3. स्मृति में इतिहास सूची में नई कमांड दर्ज करने से बचें । और, जैसा कि मेमोरी में नहीं है, फाइल करने के लिए रिकॉर्ड नहीं किया जा सकता है।

    $ shopt -ou history              # or set +o history

    shopt -os history(या set -o history) के साथ फिर से सक्षम

  4. मेमोरी में इतिहास सूची से सभी कमांड निकालें:

    $ HISTSIZE=0

    सभी आदेश मिट जाते हैं (स्मृति से) और इसलिए, फ़ाइल को संग्रहीत करने के लिए कुछ भी संग्रहीत नहीं किया जा सकता है, निश्चित रूप से, जब तक कि चर को कुछ वैध संख्यात्मक मान पर सेट नहीं किया जाता है।


//, यह एक सुविधाजनक पृष्ठ में @Ambrose से उत्तर को छोड़कर सभी उत्तरों को शामिल करता है। जाने का रास्ता, @ इस्साक। क्या आप इसके लिए डॉक्स में एक या दो लिंक जोड़ने को तैयार हैं? बहुत यकीन man historyहै कि यह हम में से ज्यादातर के लिए कटौती करने के लिए नहीं जा रहा है।
नाथन बसानी

1
@NathanBasanese विस्तारित। बेहतर?
आइजैक

// , हाँ! क्या मैं यह मानने में सही रहूंगा कि ये बैश वेरिएबल्स और शॉप्ट बिल्ट-इन डॉक्स से आए हैं ?
नाथन बसानी

//, इसके अलावा, जब मैं पढ़ रहा था बैश चर दस्तावेज़ , मैं भर में आया था HISTIGNORE, जो subsumesके समारोह HISTCONTROL
नाथन बसानी

(यह मानते हुए कि आप लिनक्स का उपयोग कर रहे हैं): यदि आप कमांड निष्पादित करते हैं तो क्या होता है LESS=+'/^ *HISTI' man bash(यह "मैनुअल पेज?) नहीं है।" @ नथनबासानी
आइजैक

3

इतिहास को बंद करने का एक सरल तरीका है, इसलिए कमांड को .bash_historyफ़ाइल में संग्रहीत नहीं किया जाएगा ।

आपको व्हाट्सएप या टैब स्पेस को किसी कमांड के सामने रखना होगा, ताकि कमांड हिस्ट्री में स्टोर न हो। उदाहरण के लिए:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

pwdआदेश, इतिहास में दुकान नहीं मिलेगा, क्योंकि यह सामने खाली स्थान के है।


यह काम नहीं करता; बैश की शिकायत है कि '-' या '-history', या अन्य हाइफ़नेटेड कमांड नहीं मिल सकते हैं।
सैमुअल ए। फाल्वो II

2
यह तब तक काम नहीं करेगा जब तक HISTCONTROL = "ignorespace" को संदंश की प्रतिक्रिया के रूप में सेट न किया गया हो
DeveloperChris

1
export HISTFILE=/dev/null 

यह मेरा गोटो तरीका है। बस के मामले में परेशान इतिहास / इतिहास / इतिहास, आदि ... काम नहीं करता है, इसे निर्यात करने के लिए / dev / null हमेशा मेरे लिए काम किया है।


अस्थायी रूप से इतिहास को निलंबित करने के लिए? यह मेरे लिए एक नियमित कमांड के रूप में काम नहीं करता था। बाद के आदेशों को इतिहास में लॉग इन किया गया। क्या आप इसे .bash_profile या स्क्रिप्ट में बुला रहे हैं? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
मैट गेसेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.