इतिहास से एक पंक्ति को कैसे हटाया जाए?


202

मैं मैक OSX में काम कर रहा हूं, इसलिए मुझे लगता है कि मैं बैश का उपयोग कर रहा हूं ...?

कभी-कभी मैं कुछ ऐसा दर्ज करता हूं जिसे मैं इतिहास में याद नहीं रखना चाहता। मेरे द्वारा इसे कैसे दूर किया जाएगा?


जवाबों:


338

रोकथाम के तरीके

यदि आप इसे इतिहास में सहेजे बिना एक कमांड चलाना चाहते हैं, तो इसे एक अतिरिक्त स्थान के साथ प्रस्तुत करें

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

इसके लिए आपको ignorespaceया तो काम करने की जरूरत ignorebothहै HISTCONTROL। उदाहरण के लिए, भागो

HISTCONTROL=ignorespace

इस सेटिंग को लगातार बनाने के लिए, इसे अपने में रखें .bashrc

पोस्टमार्टम क्लीन-अप

यदि आप पहले ही कमांड चला चुके हैं, और इसे इतिहास से हटाना चाहते हैं, तो पहले उपयोग करें

history

अपने इतिहास में आदेशों की सूची प्रदर्शित करने के लिए। उस संख्या के बगल में खोजें जिसे आप हटाना चाहते हैं (जैसे 1234) और चलाएं

history -d 1234

इसके अतिरिक्त, यदि आप जिस लाइन को हटाना चाहते हैं, वह पहले ही आपके $ HISTFILE पर लिखी जा चुकी है (जो आमतौर पर तब होती है जब आप किसी सत्र को डिफ़ॉल्ट रूप से समाप्त करते हैं), तो आपको $ HISTFILE पर वापस लिखना होगा, या नया खोलने पर लाइन फिर से दिखाई देगी सत्र:

history -w

इसने काम कर दिया। मुझे लगता है कि हमें इसे संशोधित करने के बाद ~ / .bashrc को स्रोत करने की आवश्यकता है ...
B सेवेन

3
@ jw013 मैंने PROMPT_COMMAND को सेट किया history -a, उस स्थिति में यह पहले से ही सामान्य कॉन्फ़िगरेशन के तहत बाहर निकलने के बजाय इतिहास फ़ाइल में लिखा गया है। विशेष रूप से: mywiki.wooledge.org/BashFAQ/088
जोर्डनम

5
एक पंक्ति को हटाने के बाद, आपको वर्तमान इतिहास को अपने $ HISTFILE का उपयोग करके लिखना होगा history -w। अन्यथा जब आप बाहर निकलते हैं, तो हटा दी गई रेखा अभी भी है!
फेलिप अल्वारेज

1
उपरोक्त टिप्पणी के लिए +1; उपयोग करने के history -wबाद history -d {num}वास्तव में मुझे क्या चाहिए था - उस महत्वपूर्ण tidbit को उत्तर में जोड़ा जाना चाहिए, अन्यथा एक उपयोगकर्ता सोच सकता है कि वर्तमान शेल से एक अस्थायी हटाना वास्तव में स्थायी है।
माइकल

1
@ याकूब history -wउन प्रविष्टियों के लिए आवश्यक है जो पहले से ही .bash_historyफ़ाइल में लिखी गई हैं । कैसे पुन: पेश करें (जैसे स्टॉक कॉन्फ़िगरेशन के साथ CentOS 7 पर): 1. लॉगिन 2. कमांड दर्ज करें echo foo3. लॉगआउट 4. लॉगिन फिर से 5. प्रवेश के लिए हटाएं echo foo6. लॉगआउट 7. फिर से लॉगिन करें: प्रविष्टि अभी भी है। इस आधार पर कि आप अपने बैश इतिहास को कैसे कॉन्फ़िगर करते हैं शायद आप इस मुद्दे को अन्य तरीकों से पुन: पेश कर सकते हैं - अर्थात यदि आप लॉगआउट से पहले इतिहास लेखन को उत्तेजित करते हैं।
मैक्सचेलपिजिग

53
  1. अपना सारा इतिहास साफ़ करने के लिए, उपयोग करें

    history -c
  2. एक पंक्ति को हटाने के लिए, का उपयोग करें

    history -d linenumber

6

मेरे पास यह है ~/.bashrc, जो कमांड $ forgetको पिछले कमांड को इतिहास से हटा देता है

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}

जो थोड़ा जटिल लगता है। history -d $( history | tail -n 1 | cut -f 1 -d " " )सरल नहीं होगा ?
सीसमैसैक

1
history | tail -n1है historyआदेश ही है, तो यह है कि नंबर हटाने से गलत प्रविष्टि हो जाता है। हालाँकि, history -d $( history | awk 'END{print $1-1}' )लाइन का चयन, क्षेत्र का चयन, और घटाव को जोड़ती है।
dave_thompson_085

किसी भी मौका किसी को पोर्ट के साथ मदद कर सकता है यह zshell?
एलेक्स एस

6

~/.bash_historyजब आप एक प्रविष्टि या एक से अधिक प्रविष्टि निकालना चाहते हैं, तो आप हमेशा उपयोगी प्रविष्टियों को संपादित और हटा सकते हैं


2
सबसे अधिक संभावना है कि जब आप शेल से बाहर निकलते हैं तो ये प्रविष्टियां फिर से प्रस्तुत की जाएंगी।
lbb0

5

यदि आप पूरे बैश सत्र को भूलना चाहते हैं, तो आप killवर्तमान बैश प्रक्रिया कर सकते हैं। चूंकि वर्तमान शेल का वैरिएबल $$पकड़ है pid, आप यह कर सकते हैं:

kill -9 $$

1

इतिहास को साफ़ करने के बाद आपको परिवर्तनों को लिखना होगा। और अगर आप अपने इतिहास में इतिहास पोंछना नहीं चाहते हैं तो आपको इस तरह से कमांड चलाने की जरूरत है:

history -c && history -w && logout

सौभाग्य।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.