Gostaria de saber se existe uma maneira de usar o comando history, mas apenas listar comandos que foram executados com sucesso. Da mesma forma, haveria uma maneira de listar aqueles que produziram erros?
Eu sei que cada comando tem um status de saída de:
0
- Execução bem sucedida do comando
1
- O comando falha devido a um erro durante a expansão ou redirecionamento, o status de saída é maior que zero.
2
- Uso incorreto do comando
12
- Comando encontrado, mas não executável
127
- Comando não encontrado
e pode ser verificado seguindo o comando echo $?
em: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Exemplo:
Depois de executar estes 4 comandos:
ls
help
lss
ls nonexistentfile
Tentei testar para imprimir apenas comandos bem-sucedidos (status de saída 0), que devem ser apenas '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
Isso gera:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Isso funciona um pouco, mas há dois problemas:
- Por alguma razão,
grep -v 'bash'
não está excluindo linhas que contêm 'bash', mas, se o fizergrep 'bash'
, incluirá apenas as linhas com 'bash', não sei por que um funciona e não o outro. - Está separando cada linha / comando por string. O último
ls
comando deve ser
ls nonexistentfile
, mas está sendo executadols
enonexistentfile
como comandos separados.
Alguma idéia do que devo ajustar no comando, ou como proceder para fazer isso?
ls #$CODE, ll #$CODE
a saída do histórico. Não tenho certeza se funciona para você, mas tive que mudarsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
parased -i '\$s/\$/ \#$CODE/' $HISTFILE
. Eu levei o `` fora antes de $ CODE