Mostrar comando executado junto com a saída no arquivo de log

Mostrar comando executado junto com a saída no arquivo de log

Existe uma maneira rápida e suja de registrar não apenas a saída de um arquivo shell, mas também os comandos usados ​​​​dentro dele?

Por exemplo:

whoami > who.dmp

geraria um arquivo que continha algo como:

my_username

Para um arquivo shell mais longo, qual é a maneira mais eficaz de exibir o comando que causou o resultado também no arquivo de log

Ex:

log.txt
###############

echo whoami  <- I want this to show in the file as well
my_username

time   <- I want this to show in the file as well

real    0m0.00s
user    0m0.00s
sys     0m0.00s

Existe uma maneira de fazer isso sem codificar a exportação do comando para o arquivo de saída todas as vezes?

Responder1

Usar o shell integrado set -xé provavelmente a maneira barata e suja de fazer isso. Em scripts de shell, você verá frequentemente uma linha como:

#set -x

Que alguém deixou para trás apenas comentando. Acho que você poderia usar isso na linha de comando interativa, mas pode não gostar do que faz lá.

Responder2

Você pode dar uma olhada na scriptferramenta, que salvará toda a sessão do terminal até você sair do programa que você chamou (que por padrão seria um shell). Exemplo de caso de uso:

~/:$ script teste.saída
Script iniciado, arquivo de saída é test.output
~/:$ exemplo mkdir
~/:$ exemplo de cd
~/exemplo/:$ toque novo\ arquivo.txt
~/exemplo:/$ ls
novo arquivo.txt
~/exemplo:/$ saída

O conteúdo do arquivo test.outputseria então o seguinte:

O roteiro começou em segunda-feira, 25 de junho, 16:24:28 de 2012
~/:$ exemplo mkdir
~/:$ exemplo de cd
~/exemplo/:$ toque novo\ arquivo.txt
~/exemplo/:$ ls
novo arquivo.txt
~/exemplo/:$ saída

Roteiro feito em segunda-feira, 25 de junho 16:24:41 2012

Esteja ciente de que este arquivo é umcompletotranscrição do terminal, portanto, qualquer backspace aparecerá como ^Hou ^?(ou qualquer que seja o backspace do seu terminal).

informação relacionada