stdout seletivo, stderr e log usando o comando de script [duplicate]

1

cat test.sh:

rm -v foo.tmp
date
pwd

cat test2.sh:

script bar.log -c './test.sh'

Ao executar test2.sh, gostaria de ver o seguinte, por exemplo, no meu terminal:

Fri Feb 17 18:04:30 PST 2012  
/home/me/me

No entanto, em bar.log, gostaria de ver:

removed 'foo.tmp'  
Fri Feb 17 18:04:30 PST 2012  
/home/me/me

ou (no caso de foo.tmp não existir)

rm: cannot remove 'foo.tmp'  
Fri Feb 17 18:04:30 PST 2012  
/home/me/me

Isso é factível?

    
por Codrguy 18.02.2012 / 03:21

1 resposta

0

Isso é difícil de fazer diretamente porque script coleta toda a saída em um terminal temporário e exibe que aparece naquele terminal em sua própria saída padrão.

Em test.sh , você precisa distinguir as mensagens que deseja no terminal das mensagens que deseja apenas na transcrição. Por exemplo, adicione um prefixo a cada linha indicando seu nível de importância. Como as outras linhas do seu exemplo não começam com @ , prefiro apenas linhas não essenciais (somente transcrição) com @ .

rm -v foo.tmp | sed 's/^/@/'
date
pwd

E no script de wrapper:

script bar.log -c './test.sh | grep -v "^@"'

Eu não acho que você pode fazer muito melhor sem modificar o utilitário script . (Se você quiser seguir esse caminho, acho que o método mais simples envolveria algumas linhas de expect .)

    
por 20.02.2012 / 03:33