एक से अधिक बार मैंने गलती से कई कमांड चलाए और अपने बैश इतिहास को प्रदूषित किया। मैं अपने बैश इतिहास को सहेजे बिना अपने टर्मिनल को कैसे बंद करूं? मैं फेडोरा का उपयोग कर रहा हूं।
एक से अधिक बार मैंने गलती से कई कमांड चलाए और अपने बैश इतिहास को प्रदूषित किया। मैं अपने बैश इतिहास को सहेजे बिना अपने टर्मिनल को कैसे बंद करूं? मैं फेडोरा का उपयोग कर रहा हूं।
जवाबों:
आपकी शेल का इतिहास HISTFILE
चर द्वारा इंगित फ़ाइल में सहेजा गया है। इसलिए:
unset HISTFILE
यह zsh पर भी लागू होता है, लेकिन ksh के लिए नहीं जो $HISTFILE
शेल शुरू होने पर इंगित की गई फ़ाइल में सहेजता रहता है (और इसके विपरीत, आप खोल शुरू करने के बाद अपने इतिहास को ksh में सहेजने का निर्णय लेते हैं)।
संक्षिप्त जवाब:
इसे प्रॉम्प्ट पर टाइप करें:
$ kill -9 $$
यह आपके शेल को तुरंत ही मार देगा बिना शेल के कुछ भी नहीं कर सकता जैसे सिग्नल को फंसाना, इतिहास को बचाना, निष्पादित करना ~/.bash_logout
, रोकी गई नौकरियों के बारे में चेतावनी देना, या उस अच्छे सामान में से कोई भी।
लंबा जवाब:
नोट: ये विकल्प परस्पर अनन्य नहीं हैं ; वे सभी एक ही बार में उपयोग किए जा सकते हैं।
विकल्प 1:
यदि आप एक पूर्णतावादी हैं, जब यह आपकी इतिहास फ़ाइल को अव्यवस्थित करने की बात आती है, तो आप जो कर सकते हैं वह HISTIGNORE
चर को संशोधित करने के लिए उन कमांड के ग्लोब को शामिल करना है जिन्हें आप रिकॉर्ड नहीं करना चाहते हैं। उदाहरण के लिए, यदि आप HISTIGNORE='ls*:cd*'
अपने ~/.bashrc
किसी भी उदाहरण में जोड़ते हैं ls
और cd
अपनी इतिहास फ़ाइल में सम्मिलित नहीं होते हैं।
विकल्प 2:
यदि आप एक कमांड-बाय-कमांड के आधार पर नियंत्रित करना चाहते हैं कि आपके इतिहास से कौन सी कमांड बची हुई हैं, तो आप सेट कर सकते हैं HISTCONTROL='ignorespace'
जो किसी कमांड लाइन को स्पेस से शुरू करने से रोक देगा। का उपयोग ignoreboth
करना भी दोहराया लाइनों को छोड़ देना होगा। फिर, कमांड दर्ज करने से पहले स्पेस बार को हिट करने से यह आपके इतिहास की फाइल में दिखाई नहीं देगा।
विकल्प 3:
यदि आप बस इसे बनाना चाहते हैं तो जब आप टर्मिनल को बंद कर देते हैं तो शेल तुरंत बाहर निकल जाता है, तो आप trap
संकेत दे सकते हैं कि टर्मिनल प्रोग्राम शेल भेजता है ( xterm
उदाहरण के लिए, SIGHUP
फिर शेल के बाहर निकलने का इंतजार करता है) और इतिहास को सहेजे बिना बाहर निकलें। यह संकेत प्राप्त करता है। इसे अपने में जोड़ें ~/.bashrc
:
# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
kill -9
जब कुछ और सब कुछ विफल हो गया है, तो गंभीर स्थितियों को छोड़कर किसी भी चीज़ का उपयोग करने को बढ़ावा देना एक अच्छा विचार है ।
मुझे यह देखकर आश्चर्य हुआ कि किसी ने history -c
तुरंत पहले सुझाव नहीं दिया है exit
। IINM (मैं कोई विशेषज्ञ नहीं हूँ) जो अच्छी तरह से करेंगे।
history -r
इतिहास फ़ाइल को फिर से पढ़ेंगे, इसलिए बचत एक विकल्प नहीं है।
दो पर्यावरण चर हैं जो इतिहास फ़ाइल को निर्धारित करने के लिए बैश का उपयोग करते हैं और शेल के बाहर निकलने पर इसे लिखने के लिए कितनी लाइनें हैं।
आप इनमें से किसी के साथ अपने सत्र के इतिहास को फेंक सकते हैं (सत्र के दौरान सेट करें जिसे आप अपनी इतिहास फ़ाइल से छोड़ना चाहते हैं):
HISTFILE=/dev/null
या
HISTSIZE=0
या तो इनमें से फेडोरा पर बैश में काम ठीक है
यकीन नहीं होता कि आप अपने कमांड इतिहास की इतनी परवाह क्यों करते हैं। यदि आपको अक्सर कुछ आदेशों की आवश्यकता होती है, तो आपको अधिक मज़ा आ सकता है यदि आप उनके लिए उपनाम परिभाषित करते हैं ताकि आप उन्हें इतिहास में देखने के बजाय दो कीस्ट्रोक्स के साथ वापस पा सकें।
एली ने पहले ही आपको बैश के लिए सही उत्तर दिया जो सेट करना हैHISTSIZE=0
।
मैं बस इसे GNU स्क्रीन के लिए करने की विधि जोड़ूंगा । प्रेस Ctrl+A
(स्क्रीन एस्केप अनुक्रम) के बाद :scrollback 0
। यह स्क्रॉल-बैक इतिहास को हटा देगा। अब आप तुरंत :scrollback 15000
स्क्रॉल-बैक बफर आकार रीसेट करने के लिए कर सकते हैं ।
screen(1)
?
scrollback=0
।
Ctrl+a H
न Ctrl+a :clear
तो इतिहास को हटाएगा। आपको चाहिए Ctrl+a :scrollback 0
। आप स्वयं इसका परीक्षण कर सकते हैं। एक नया स्क्रीन सत्र प्रारंभ करें। अब ए cat /etc/passwd
। अब, उपरोक्त में से कोई भी करें - Ctrl+a H
या Ctrl+a :clear
। अब, स्क्रीन बफ़र से कॉपी करने की कोशिश करें, Ctrl+a [
इसके बाद ऊपर जाने के लिए अप-ऐरो द्वारा डोनिग करें और देखें कि आप कॉपी करने के लिए कितनी दूर जा सकते हैं। यदि आपने a का Ctrl+a :scrollback
अनुसरण किया है clear
, तो आप केवल उतना ही आगे बढ़ेंगे जितना आप वर्तमान विंडो में देख सकते हैं क्योंकि कोई स्क्रॉलबैक बफर नहीं होगा।
set HISTFILE
अगली बार जब मैं लॉग इन करने की जरूरत नहीं है? (सिर्फ यह कहें कि यह सही है या गलत है)