Como extrair cada linha de comando, código de saída e stdout / stderr em um script

0

Aqui está o que estou tentando alcançar:

Estou tentando escrever um script que, para cada comando que o usuário está executando no Bash, salvará o seguinte em um arquivo:

  1. O comando completo que o usuário digitou
  2. O código de saída do comando (AFAIK script não fornece isso)
  3. Conteúdo do stdout e stderr que o comando produziu.

Consegui implementar o 1 e o 2 muito rapidamente usando o link

Estou preso com 3.

Eu quero criar um script que eu possa colocar em ~/.bash_profile para facilitar a configuração.

Obrigado antecipadamente!

    
por Ikaso 25.07.2017 / 07:39

1 resposta

0

Conforme explicado aqui , é possível usar o redirecionamento exec e &> com tee para capturar o padrão saída e erro padrão para um arquivo.

Uma coisa que eu estou querendo saber é se você quer ter uma captura diferente por comando (como pode ser entendido de sua exigência para "cada comando" e a afirmação de que script não pode ser usado) ou se você quer para capturar uma sessão inteira em um arquivo de log.

Se for o último, execute script no início da sessão e, em seguida, implemente o que quer que você tenha feito dentro disso, tudo funcionará bem, mas a resposta vinculada acima também ajudará. Se você quiser um arquivo diferente para cada comando, provavelmente desejará implementar algo que seja disparado no prompt de comando - possivelmente implementando $PROMPT_COMMAND ( man bash para obter mais detalhes) e substituindo o arquivo de log de cada comando.

Observe que, como exec &> captura os fluxos padrão em um arquivo, ele basicamente é desativado e os aplicativos TTY (que são desenhados na tela) são executados (como less ou mc ). Isso será verdadeiro para qualquer ferramenta de captura de console no nível do shell, a menos que ele faça uma emulação TTY completa (como eu acredito script ).

    
por 25.07.2017 / 09:31