इतिहास को बदलने से कैसे रोकें बैश?


26

यदि मैं अपने कीबोर्ड पर ऊपर या नीचे तीर दबाता हूं और फिर अपने इतिहास से कुछ संशोधित करता हूं, तो यह हमेशा के लिए बदल जाता है। यहां तक ​​कि अगर मैं Ctrl-C दबाता हूं और फिर इसे फिर से लाने की कोशिश करता हूं, तो यह अभी भी बदल गया है - मैंने अपने इतिहास में उस प्रविष्टि को खो दिया है।

मेरे द्वारा इसे होने से कैसे रोका जा सकता है?


3
मुझे इस सवाल का शीर्षक पसंद है। आप वास्तव में इतिहास को बदल सकते हैं और आप शिकायत कर रहे हैं? तुम्हारी क्या दिक्कत है?!
डैनियल बेक

@ डैनियल: लोल, हाँ ... मेरा मतलब है, यह ऐसा है जैसे मैं अपना अतीत बदल रहा हूं। स्पष्ट रूप से निरर्थक, और यह थोड़ी देर के बाद हास्यास्पद रूप से कष्टप्रद हो जाता है । : \
मेहरदाद

Btw, यदि आप इतिहास- खोज- xxx का उपयोग करते हैं, तो व्यवहार अलग है। शायद यह आपके लिए कुछ है?
डैनियल बेक

@ डैनियल: यह वास्तव में उपयोगी है - बहुत बहुत धन्यवाद। लेकिन फिर भी, मैं इस प्रश्न का उत्तर जानना चाहूंगा, क्योंकि कभी-कभी कमांड एक-दूसरे की तरह नहीं दिखते हैं, और यह काम नहीं करता है।
मेहरदाद

एक खाली प्रॉम्प्ट के साथ इतिहास-खोज नियमित इतिहास की तरह ही काम करता है / अगले, यानी सभी प्रविष्टियों को प्रदर्शित करता है।
डैनियल बेक

जवाबों:


17

आप रीडलाइन सेटिंग चाहते हैं:

set revert-all-at-newline on

आप इसे या तो ~/.inputrcनीचे रख सकते हैं (नीचे नोट देखें), या अपने bind 'revert-all-at-newline on'में डाल दें ~/.bashrc

डेमो:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

आगे के विवरण बैश मैनपेज में हैं :

revert-all-at-newline

यदि ' on' पर सेट किया जाता है , तो रीडलाइन स्वीकार-लाइन निष्पादित होने पर लौटने से पहले इतिहास की सभी परिवर्तनों को पूर्ववत कर देगा। डिफ़ॉल्ट रूप से, इतिहास लाइनों को संशोधित किया जा सकता है और कॉल करने के लिए अलग-अलग पूर्ववत सूचियों को रीडलाइन पर बनाए रखा जा सकता है। डिफ़ॉल्ट ' off' है।


ध्यान दें:

यदि ~/.inputrcसेटिंग के उद्देश्य से एक नई फ़ाइल बनाई गई है revert-all-at-newline, तो ध्यान रखें कि बैश किसी भी सेटिंग्स के बजाय इस फ़ाइल में रीडलाइन सेटिंग्स का उपयोग करेगा जो फ़ाइल में हो सकता है /etc/inputrc। अर्थात्, निर्दिष्ट की गई /etc/inputrcकोई भी सेटिंग अब प्रभावी नहीं होगी। इसलिए, यदि /etc/inputrcफ़ाइल मौजूद है, तो ~/.inputrcलाइन से शुरू करना अच्छा है :

$include /etc/inputrc


तुम कमाल हो, यही मुझे चाहिए। अब मैं अपने मॉनीटर पर मुक्का नहीं मारना चाहता। : डी +1000000 (मैं चाहता हूँ)
Mehrdad

5

मैंने प्रवेश किया:

ls /tmp

- आश्चर्यजनक। अब मैं प्रवेश नहीं करना चाहता

ls /temp 

और इतिहास में प्रवेश करने के लिए इसे रोक सकता है, इसलिए इसे ls / tmp को अधिलेखित करने से रोकें, अगर मैं एक रिक्त के साथ कमांड शुरू करता हूं:

 ls /temp

यह देखना मुश्किल है, लेकिन अगर आप इसे जानते हैं ...

इसके द्वारा नियंत्रित किया जाता है

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

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

लेकिन शायद आप एक समाधान के लिए बाहर हैं, जहां आप दोनों आदेशों के साथ समाप्त होते हैं, अनमॉडिफाइड पुराना एक, और नया। बाश या सेटिंग्स का मेरा संस्करण इस तरह का व्यवहार करता है, लेकिन मुझे नहीं पता, आपका क्या अलग है।


हा; मैंने हमेशा माना कि अग्रणी स्थान के साथ कमांड सेव नहीं करना बग था। धन्यवाद। :)
२५'११
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.