Como logar o comando bash com sua saída?

2

Eu quero que a linha de comando real seja conectada com sua saída .

Eu rotineiramente executo comandos importantes como este:

PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save 2>&1 | tee -a my-command.log

Agora, my-command.log contém os dois stdout e stderr de my-command.pl . No entanto, não contém a linha de comando acima.

Eu sei do arquivo bash history; então, eu acho, eu poderia copiar de lá (ou do terminal) à mão, mas esta não é uma boa solução, é claro.

Eu acho que eu poderia escrever uma função de shell que aceitaria uma linha de comando, ecoaria e a executaria, mas então eu teria que lidar com o inferno das citações.

Eu tentei set -v , mas parece ignorar o redirecionamento.

script salva a linha de comando (mas somente se eu tiver iniciado um novo shell, não com -c ) mas ele não funciona no buffer de interação do shell emacs e também salva o prompt do shell - incluindo as seqüências de escape! - para o seu arquivo de log, por isso é sub-ótimo.

    
por sds 24.04.2013 / 17:20

1 resposta

3

Experimente a opção -x para o bash:

bash -x "PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save" 2>&1 | tee -a my-command.log

Meu teste:

$ bash -x -c "echo a bunch of difffernt arguments"
+ echo a bunch of difffernt arguments
a bunch of difffernt arguments
    
por 24.04.2013 / 19:36