Me pregunto si hay una manera de usar el comando de historial, pero solo enumere los comandos que se ejecutaron correctamente. Del mismo modo, ¿habría alguna forma de enumerar los que produjeron errores?
Sé que cada comando tiene un estado de salida de:
0
- Ejecución exitosa del comando
1
: el comando falla debido a un error durante la expansión o la redirección, el estado de salida es mayor que cero.
2
- Uso de comando incorrecto
12
- Comando encontrado pero no ejecutable
127
- Comando no encontrado
y puede verificarse con el comando echo $?
desde: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Ejemplo:
Después de ejecutar estos 4 comandos:
ls
help
lss
ls nonexistentfile
Intenté probar para imprimir solo comandos exitosos (estado de salida de 0), que debería ser solo 'ls' y '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
Esto produce:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Esto funciona un poco, pero hay dos problemas:
- Por alguna razón,
grep -v 'bash'
no excluye líneas que contienen 'bash', pero si lo hagogrep 'bash'
, solo incluirá las líneas con 'bash', no estoy seguro de por qué una funciona y no la otra. - Está separando cada línea / comando por cadena. El último
ls
comando debería ser
ls nonexistentfile
, pero se está ejecutandols
ynonexistentfile
como comandos separados.
¿Alguna idea sobre lo que debo ajustar en el comando o cómo hacer esto?
fuente
ls #$CODE, ll #$CODE
el resultado del historial. No estoy seguro si funciona para usted, pero tuve que cambiarsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
ased -i '\$s/\$/ \#$CODE/' $HISTFILE
. Tomé el `` antes de $ CODE#
(sin código) sin el escape. Debe haber algún problema de citas.