Mi chiedo se esiste un modo per utilizzare il comando history ma elencare solo i comandi eseguiti correttamente. Allo stesso modo, ci sarebbe un modo per elencare quelli che hanno prodotto errori?
So che ogni comando ha uno stato di uscita di:
0
- Esecuzione
1
corretta del comando - Il comando ha esito negativo a causa di un errore durante l'espansione o il reindirizzamento, lo stato di uscita è maggiore di zero.
2
- Utilizzo errato del comando
12
- Comando trovato ma non eseguibile
127
- Comando non trovato
e può essere verificato procedendo con il comando echo $?
da: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Esempio:
Dopo aver eseguito questi 4 comandi:
ls
help
lss
ls nonexistentfile
Ho provato a stampare solo i comandi riusciti (stato di uscita 0), che dovrebbe essere solo 'ls' e '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
Questo produce:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Questo in qualche modo funziona, ma ci sono due problemi:
- Per qualche motivo,
grep -v 'bash'
non esclude le righe contenenti 'bash', ma se lo facciogrep 'bash'
, includerà solo le righe con 'bash', non sono sicuro del motivo per cui uno funziona e non l'altro. - Sta separando ogni riga / comando per stringa. L'ultimo
ls
comando dovrebbe essere
ls nonexistentfile
, ma è in esecuzionels
enonexistentfile
come comandi separati.
Qualche idea su cosa dovrei regolare nel comando o su come procedere?
ls #$CODE, ll #$CODE
l'output della cronologia. Io non sono sicuro se funziona per voi, ma ho dovuto cambiaresed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
ased -i '\$s/\$/ \#$CODE/' $HISTFILE
. Ho preso il `` out before $ CODE