Ich frage mich, ob es eine Möglichkeit gibt, den Befehl history zu verwenden, aber nur Befehle aufzulisten, die erfolgreich ausgeführt wurden. Gibt es auch eine Möglichkeit, Fehler aufzulisten?
Ich weiß, dass jeder Befehl den Exit-Status hat:
0
- Erfolgreiche Ausführung des Befehls
1
- Der Befehl schlägt aufgrund eines Fehlers während der Erweiterung oder Umleitung fehl. Der Beendigungsstatus ist größer als Null.
2
- Falsche Befehlsverwendung
12
- Befehl gefunden, aber nicht ausführbar
127
- Befehl nicht gefunden
und kann überprüft werden, indem der Befehl mit echo $?
folgender Adresse ausgeführt wird : http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Beispiel:
Nach dem Ausführen dieser 4 Befehle:
ls
help
lss
ls nonexistentfile
Ich habe versucht zu testen, um nur erfolgreiche Befehle zu drucken (Exit-Status 0), die nur 'ls' und 'help' sein sollten:
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
Dies gibt aus:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Das funktioniert etwas, aber es gibt zwei Probleme:
- Aus irgendeinem Grund werden
grep -v 'bash'
Zeilen, die 'bash' enthalten, nicht ausgeschlossen, aber wenn ich dies tuegrep 'bash'
, werden nur die Zeilen mit 'bash' eingeschlossen. Ich bin mir nicht sicher, warum eine funktioniert und nicht die andere. - Es trennt jede Zeile / jeden Befehl durch eine Zeichenfolge. Der letzte
ls
Befehl sollte sein
ls nonexistentfile
, aber er wird ausgeführtls
undnonexistentfile
als separate Befehle.
Irgendeine Idee, was ich im Befehl anpassen soll oder wie ich das machen soll?
quelle
ls #$CODE, ll #$CODE
für die Verlaufsausgabe bekommen. Ich bin mir nicht sicher , ob es für Sie arbeitet, aber ich musste sich ändernsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
zused -i '\$s/\$/ \#$CODE/' $HISTFILE
. Ich nahm das `` vor $ CODE#
(kein Code) ohne die Flucht. Muss ein Zitatproblem sein.