У меня есть такой код на bash (Mac OS X):
foo.sh | tee foo.log
echo $?
Проблема в том, что $? содержит код выхода tee, а не код выхода foo.sh. Как мне получить код выхода из foo.sh?
Переменная окружения $PIPESTATUS
представляет собой массив статусов выхода для всех процессов в конвейере.
Также используйте подоболочку:
tm@hoegaarden:~$ cat foo.sh
#!/bin/bash
echo "stuff and junk"
exit 123
tm@hoegaarden:~$ (./foo.sh ; echo $? > ./retval ) | tee output
stuff and junk
tm@hoegaarden:~$ cat retval
123