क्या किसी बैश इतिहास संशोधन को पूर्ववत करने का कोई तरीका है?


9

दबाकर, मैं पहले से दर्ज आदेशों के माध्यम से जा सकता हूं। मैंने देखा है कि अगर मैं उनमें से एक को संशोधित करता हूं, तो यह इतिहास को बदल देता है। उदाहरण के लिए, यदि मैं टाइप करता हूं:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

इतिहास अब दिखाता है कि दूसरी कमान थी echo d, नहीं echo b। मैं echo bइतिहास में सबसे पहले कैसे रखूँ?

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

यह बहुत कम ही आता है, लेकिन जब मुझे लगता है कि यह वास्तव में परेशान करता है। क्या मूल इतिहास को स्वचालित रूप से संरक्षित करने का कोई तरीका है?


1
साथ historyआप सभी आदेश देख सकते हैं। आप का चयन करने के बाद आपको क्या चाहिए। अब आप कौन सा खोल इस्तेमाल कर रहे हैं?
हस्त्तूर

6
मैं ऐसा नहीं कर सकता। अगर मैं c को d में बदलता हूं, तो CTRL + C दबाएं और [फिर से] दबाएं, यह अभी भी कहता है echo c
मार्टिन वॉन विटिच

जवाबों:


6

अपने में डालने की कोशिश करें ~/.inputrc

 set revert-all-at-newline on

कुछ मामलों में आप इसे डिफ़ॉल्ट मान (ऑफ) में पा सकते हैं।
इसे निष्पादित readlineहोने accept-lineसे पहले इतिहास की सभी परिवर्तनों को पूर्ववत करने के लिए मजबूर करना चाहिए । (अधिक जानकारी में man bash)

संपादित करें:
CTRL+c और set revert-all-at-newline onतब से ठीक काम करता है bash-4.3.30

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

परंतु:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

अच्छा, यह बेहतर उपाय है। दिलचस्प बात यह है कि CTRL-c वास्तव में संशोधित मूल्य को याद रखने का कारण होगा, हालांकि पूरी तरह से लाइन को मिटा देना या नीचे गिराना और फिर एंटर दबाकर या किसी अन्य कमांड को चलाना इतिहास को पुनर्स्थापित करेगा।
डीन सेरेनीवी

@DeanSerenevy: धन्यवाद, मुझे आपका वर्कअराउंड भी पसंद है और मैं CTRL-in का nanoभी इस्तेमाल करना शुरू करता हूं :-)
Hastur

4

आम तौर पर:

CTRL-a # ENTER

करूंगा।

यदि आप संशोधित कमांड निष्पादित करते हैं तो मूल कमांड को याद किया जाएगा। बेशक, आप वास्तव में निष्पादित नहीं करना चाहते हैं, इसलिए आप लाइन के साथ टिप्पणी कर सकते हैं #

अपने उदाहरण में, आप तो अपने इतिहास में होगा: echo a, echo b, echo c, # echo d


1
alt-shift-3यदि आपका बैश उपयोग कर रहा है तो आप वर्तमान कमांड लाइन पर टिप्पणी करने के लिए दबा सकते हैं readline/insert-commentमें man 3 readline(या man bash) की जानकारी में और अधिक के लिए।
साइकोइ जूल 24'15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.