I use wget to download a big file to two FIFOs like that:

wget <wget-args> -O - | tee -a "$fifo1" >> "$fifo2"

I want to retrieve the error code of wget on failure.

set -o pipefail returns error code of the rightmost command in a pipe so I can't be sure that the error code comes from wget.

So how can I do it in ash?


Just redirect return code of wget to a file , here $? contains the return code

$ (wget <wget-args> -O - ; echo $? > result) | tee -a "$fifo1" >> "$fifo2"

Here the file result will contain the status code of your operation

$ cat result
| improve this answer | |
  • Why is the stdout from wget passed further to tee and call to echo is kind'a transparent? – K. Koovalsky Jul 12 '18 at 12:57
  • I just replicated what you did, and tried giving you the return code of the first command – Arushix Jul 12 '18 at 13:03
  • This won't work. The pipe is not getting any input, the ; ends the first command. – terdon Jul 12 '18 at 13:43
  • That first part of the pipeline must run in a subshell so that the output of wget is piped to tee. ( wget ...; echo ... >result ) | tee ... – Kusalananda Jul 12 '18 at 13:43
  • @Kusalananda please, post an answer and I'll accept it. – K. Koovalsky Jul 13 '18 at 6:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.