Como eu adiciono comandos de sucesso a um arquivo usando o bash shell?

1

Pode haver uma maneira mais fácil de fazer isso, eu vou estar executando um monte de comandos em uma caixa. Quero acompanhar os bem-sucedidos para criar um script para automatizar isso no futuro.

Eu tentei

<command> && echo "!!" >> file

mas o !! está imprimindo a linha antes desta. Eu tentei algumas outras coisas, mas não consigo fazer algo funcionar

    
por GP89 17.12.2012 / 22:43

3 respostas

3

Você pode fazer assim:

PROMPT_COMMAND='[[ $? == 0 ]] && history 1 | sed -r "s/\ +[0-9]+\ +//" >> successful'

$ PROMPT_COMMAND mantém um comando que o bash executa antes de emitir um prompt. Então, o que isto faz é avaliar o status de saída do seu comando anterior ( depois você pressiona enter para executar o comando atual, mas antes o bash o avalia ), e se foi bem sucedido, puxe-o de seu histórico bash, retire o número do comando e coloque-o em um arquivo separado.

Agora você não precisa acrescentar nada aos seus comandos:

echo "exits successfully and will be appended"
ehco "only ends up in bash history"

Observe que os comandos do histórico readline, !! e o resto de sua família, só funciona em shells interativos, você não pode usá-los em scripts.

Observe também que a opção -r é gnu sed, o bsd sed não o possui.

    
por 18.12.2012 / 16:19
1

Eu usaria uma segunda shell e strace. No shell 1, use echo $$ para encontrar o PID do seu shell. Em seguida, use strace -f -q -eexecve,exit_group -p that_pid_here para rastrear comandos e status de saída. A saída resultante pode então ser mutilada em um shellscript posteriormente.

    
por 17.12.2012 / 22:58
0

Isso fará com que observe que é "em vez de"

<command> && echo '!!' >> file
    
por 18.12.2012 / 16:28

Tags