我想這樣做:檢查RCODE和管道在bash
./first.sh
if [ $? -ne 0 ]; then
exit
fi
# pipe output of first.sh to second.sh
所以second.sh
不應該運行,除非first.sh
成功,但我真的不知道從哪裏管first.sh
的輸出的平均時間。
我想這樣做:檢查RCODE和管道在bash
./first.sh
if [ $? -ne 0 ]; then
exit
fi
# pipe output of first.sh to second.sh
所以second.sh
不應該運行,除非first.sh
成功,但我真的不知道從哪裏管first.sh
的輸出的平均時間。
爲什麼不把它轉儲到一個文件,然後寫入second.sh
如果first.sh
成功?
./first.sh > /tmp/first.pid
if [ $? -ne 0 ]; then
exit
fi
./second.sh < /tmp/first.pid
如果併發是一個問題,您可能希望用pid或類似的範圍來對文件進行範圍。
可以設置bash
選項pipefail
導致錯誤並退出時,管道中的命令無法報告:
set -e # Set exit on error
set -o pipefail # Set exit on error to work with pipes
但管道中的所有命令已經運行,因此second.sh已經部分運行。對他來說這可能是好的,但是他的語義與他發佈的不同 – frankc
使用臨時文件? – frankc
光盤空間使用情況,併發問題等。雖然這確實有用,但我猜這裏有更好的做法。 – djechlin
我不那麼誠實。它非常標準。您可以通過執行tmpstr =「$(./ first.sh)」將輸出存儲在變量中,然後執行echo「$ tmpstr」| second.sh但是如果你不小心的話,這可能會引入一些逃避的問題。你幾乎必須做這些事情之一,因爲任何使用管道的變體都將開始在first.sh完成之前將輸入發送到second.sh – frankc