O comando Pipe dentro do exec não funciona

1

Eu tenho o comando em um script:

exec su -s /bin/sh -c 'exec "$0" "$@"  | ts "[%Y-%m-%d %H:%M:%S]"' user -- test.python $FULLPATH   &> log & 

Em que FULLPATH é o caminho do arquivo Python de teste. Com esse comando, esperava-se que a saída do script fosse gravada no arquivo de log com registros de data e hora do comando ts .

Isso realmente não acontece, a saída é escrita sem timestamps, além de que eu também tentei fazer isso:

exec su -s /bin/sh -c 'exec "$0" "$@"' user -- test.python $FULLPATH  | ts "[%Y-%m-%d %H:%M:%S]" &> log & 

Isso também dá o mesmo resultado com o comando anterior.

Quaisquer pensamentos sobre por que isso acontece e uma possível solução seria muito apreciada, obrigado.

    
por user3224454 08.05.2017 / 19:10

2 respostas

1

Usar exec com & faz pouco sentido (embora isso não seja a fonte do seu problema), isso não salvará nenhuma bifurcação extra. Com componentes de pipe, só consigo ver salvando um fork com o shell zsh , mas somente se aplicado no último componente do pipe ( cmd1 | exec cmd2 , e isso significa que zsh não aguarda mais pelos outros componentes do pipe).

Aqui, você não está redirecionando o stderr do script python para ts , embora esteja enviando-o para o arquivo log . Você provavelmente iria querer:

su -s /bin/sh -c '
  "$0" "$@" 2>&1 |
    ts "[%Y-%m-%d %H:%M:%S]"
  ' user -- test.python "$FULLPATH" > log 2>&1 & 
    
por 08.05.2017 / 23:21
0

Perca os execuções sem sentido e a parte em que você está passando a metade do comando após o -:

su -s /bin/sh -c "test.python $FULLPATH | ts '[%Y-%m-%d %H:%M:%S]'" &> log
    
por 08.05.2017 / 21:12