script: registra os códigos de saída e de saída

2

O comando script registra uma sessão inteira do shell no arquivo. Isso é ótimo, mas ao rever a sessão eu gostaria de poder ver o código de saída de cada comando que eu executei.

É possível capturar isso nos script logs? Idealmente, sem exibi-lo para o usuário da sessão script , mas isso seria aceitável, se necessário.

Exemplo de execução de script:

me:~ oliverlade$ script
Script started, output file is typescript
bash-3.2$ echo "hello"
hello
bash-3.2$ true
bash-3.2$ false
bash-3.2$ exit
exit

Script done, output file is typescript

O conteúdo do arquivo de log:

me:~ oliverlade$ cat typescript
Script started on Sun Aug  7 13:02:43 2016
bash-3.2$ echo "hello"
hello
bash-3.2$ true
bash-3.2$ false
bash-3.2$ exit
exit

Script done on Sun Aug  7 13:03:03 2016

O que eu gostaria que fosse:

me:~ oliverlade$ cat typescript
Script started on Sun Aug  7 13:02:43 2016
bash-3.2$ echo "hello"
hello
(exit 0)
bash-3.2$ true
(exit 0)
bash-3.2$ false
(exit 1)
bash-3.2$ exit
exit

Script done on Sun Aug  7 13:03:03 2016
    
por orlade 07.08.2016 / 05:11

2 respostas

2

Nas páginas script man:

-e, --return

"Retorna o código de saída do processo filho. Usa o mesmo formato que a terminação bash no código de saída de terminação de sinal é 128 + n." Eu interpretei mal isso ...

Se você precisar usar script , parece que a melhor maneira de ver o último código de saída seria adicioná-lo ao prompt do shell. Não é uma má ideia fazer isso de qualquer maneira.

    
por 07.08.2016 / 07:54
1

Você pode incorporar o status de saída do último comando executado ( $? ) no seu prompt principal ( PS1 ).

Um exemplo:

$ PS1='$? \$ '
0 $

Teste:

0 $ false
1 $

Você precisa usar aspas simples para evitar a expansão de $? no momento da atribuição a PS1 . Você não deve export da variável de prompt.

Outro exemplo:

$ PS1=$'(exit $?)\n$ '
(exit 0)
$

Testando isso:

(exit 0)
$ false
(exit 1)
$
    
por 07.08.2016 / 08:49