इतिहास - सूची केवल सफलतापूर्वक कमांड चलाते हैं


10

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

मुझे पता है कि प्रत्येक कमांड की एक निकास स्थिति है:

0- कमांड का सफल निष्पादन
1- कमांड विस्तार या पुनर्निर्देशन के दौरान त्रुटि के कारण विफल हो जाता है, बाहर निकलने की स्थिति शून्य से अधिक है।
2- गलत कमांड का उपयोग
12- कमांड मिला, लेकिन निष्पादन योग्य नहीं
127- कमांड नहीं मिला

और इसके साथ कमांड को आगे बढ़ाते हुए चेक किया जा सकता है echo $?
: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html

उदाहरण:

इन 4 कमांडों को चलाने के बाद:

ls
help
lss
ls nonexistentfile

मैंने केवल सफल कमांड (0 से बाहर निकलने की स्थिति) के परीक्षण की कोशिश की, जो केवल 'ls' और 'help' होनी चाहिए:

for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out

यह आउटपुट:

ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found

यह कुछ हद तक काम करता है, लेकिन दो समस्याएं हैं:

  1. किसी कारण से, grep -v 'bash''बैश' वाली लाइनों को बाहर नहीं कर रहा है, लेकिन अगर मैं करता हूं grep 'bash', तो इसमें केवल 'बैश' वाली लाइनें शामिल होंगी, मुझे यकीन नहीं है कि एक काम क्यों करता है और दूसरा नहीं।
  2. यह स्ट्रिंग द्वारा प्रत्येक पंक्ति / कमांड को अलग कर रहा है। पिछले lsआदेश होना चाहिए
    ls nonexistentfile, लेकिन यह चल रहा है lsऔर nonexistentfileअलग आदेशों के रूप में।

कमांड में मुझे क्या समायोजित करना चाहिए, या यह करने के बारे में कैसे जाना जाए, इस पर कोई विचार?

जवाबों:


4

यह एक हैक था जिसे मैंने एक साझा खाते पर एक बार इस्तेमाल किया था जिसने यह करने के लिए ट्रैक किया था:

PROMPT_COMMAND="history -a; sed -i '\$s/\$/ \#$NAME/' $HISTFILE; history -r; $PROMPT_COMMAND"

यह प्रदर्शित historyहोने से पहले लिखते हैं PROMPT: वास्तव में, प्रत्येक आदेश के बाद। इतिहास में निकास कोड बचाने के लिए आप इसे संशोधित कर सकते हैं:

PROMPT_COMMAND="CODE=$?; history -a; sed -i '\$s/\$/ \#\$CODE/' $HISTFILE; history -r; $PROMPT_COMMAND"

यह आपके इतिहास में प्रविष्टियाँ छोड़ देगा जैसे:

$ history 2
 1271  vim .bashrc #0
 1272  history 2

(अंतिम प्रविष्टि अद्यतन किया जाएगा, के बादhistory आदेश बाहर निकलता है, तो बाहर निकलने के कोड इस उत्पादन में दिखाई नहीं देता है।)

यह कष्टप्रद प्रभाव है कि आपके संकेत में इतिहास टिप्पणी होगी:

$ # press up
$ history 2 #0

टिप्पणी आमतौर पर निष्पादन या आउटपुट को प्रभावित नहीं करती है, लेकिन एक दर्द को संपादित करती है।

अब आप grepअपना इतिहास देख सकते हैं कि कौन से कोड सफलतापूर्वक समाप्त हुए हैं:

history | grep '#0$'
# or grep '#[^0]*$' for unsuccessful commands.

मैंने इसे Mobaxterm और पुट्टी दोनों पर आज़माया, और ls #$CODE, ll #$CODEइतिहास आउटपुट के लिए मिला । मुझे यकीन है कि अगर यह आपके लिए काम नहीं कर रहा हूँ, लेकिन मैं बदलना पड़ा sed -i '\$s/\$/ \#\$CODE/' $HISTFILE'करने के लिए sed -i '\$s/\$/ \#$CODE/' $HISTFILE। मैंने $ CODE से पहले `` को बाहर निकाल दिया
lkisac

@lkisac मेरे लिए अजीब तरह से, इसने #भागने के बिना (कोई कोड) नहीं दिया । कुछ उद्धरण मुद्दा होना चाहिए।
मूरू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.