Linux
管道中命令的返回碼
以下腳本在 Solaris 上使用*/bin/ksh執行,在 Linux 上使用/bin/sh執行*
cmd | tee -a cmd.log | tail exit $?
cmd的輸出保存在文件cmd.log中,最後一行顯示在
stdout
.的目的是使用cmd
exit $?
的返回碼退出腳本。當然這個不起作用,因為
$?
保存了管道中最後一個命令的返回碼,即
tail
.解決方法(我將省略所有清理活動):
{ cmd; echo $? > error.file; } | tee -a cmd.log | tail exit `cat error.file`
但是有沒有另一種方法來獲取cmd的返回碼並避免創建像error.file這樣的文件?
試試這個:
(cmd; echo $? 1>&2) | tee -a cmd.log | tail
或者,如果您想將 STDERR 重定向到 tee:
exec 3>&1; (cmd 2>&1; echo $? >&3 3>&-)| tee -a cmd.log; exec 3>&-