In a command where we have lot of pipes redirecting their outputs further, is there any way to get to know the value of echo $? till half of it's execution or till certain number of pipes, as opposed to the overall status of the whole command's?
No bash, há uma variável PIPESTATUS
, que é uma matriz contendo o status de saída de cada comando no pipeline mais recente.
$ ls -lrt --time-style=+"%b %d %Y %H:%M:%S" /bin/*|head -1|tr -s " "| \
cut -d " " -f 9|date --date - +%s
1429070400
$ echo ${PIPESTATUS[@]}
141 0 0 141 0
$ kill -l 'expr 141 - 128'
PIPE
Isso nos diz que os comandos ls
e cut
saíram com um SIGPIPE, o que é esperado porque sua saída não foi completamente consumida pelo próximo comando no pipeline.
In the first unbroken command I'm still getting an output without any error and is not something I'm expecting.
Isso ocorre porque o comando date
está funcionando como esperado, mas não da maneira que você espera.
date --date -
não lê a data do stdin; em vez disso, ele usa -
como a string de data. Não consigo ver onde o significado de um solitário -
está documentado, mas parece ser o mesmo que 0
ou 0000
, que significa "meia-noite do dia atual".