मैं सोच रहा था कि क्या इतिहास कमांड का उपयोग करने का एक तरीका है, लेकिन केवल सूची कमांड जो सफलतापूर्वक चलाए गए थे। इसी तरह, क्या त्रुटियों का उत्पादन करने वालों को सूचीबद्ध करने का कोई तरीका होगा?
मुझे पता है कि प्रत्येक कमांड की एक निकास स्थिति है:
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
यह कुछ हद तक काम करता है, लेकिन दो समस्याएं हैं:
- किसी कारण से,
grep -v 'bash'
'बैश' वाली लाइनों को बाहर नहीं कर रहा है, लेकिन अगर मैं करता हूंgrep 'bash'
, तो इसमें केवल 'बैश' वाली लाइनें शामिल होंगी, मुझे यकीन नहीं है कि एक काम क्यों करता है और दूसरा नहीं। - यह स्ट्रिंग द्वारा प्रत्येक पंक्ति / कमांड को अलग कर रहा है। पिछले
ls
आदेश होना चाहिए
ls nonexistentfile
, लेकिन यह चल रहा हैls
औरnonexistentfile
अलग आदेशों के रूप में।
कमांड में मुझे क्या समायोजित करना चाहिए, या यह करने के बारे में कैसे जाना जाए, इस पर कोई विचार?
ls #$CODE, ll #$CODE
इतिहास आउटपुट के लिए मिला । मुझे यकीन है कि अगर यह आपके लिए काम नहीं कर रहा हूँ, लेकिन मैं बदलना पड़ाsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
करने के लिएsed -i '\$s/\$/ \#$CODE/' $HISTFILE
। मैंने $ CODE से पहले `` को बाहर निकाल दिया