我試圖讓這個呼叫殼牌:分析迴歸
TMP=$(find /mydir/ -type f -mmin +1440 | xargs rm -f)
M=$?
的結果不幸的是,如果/mydir/
不存在的$?
結果仍然是「0
」,像有沒有問題。我想得到而不是'0
'如果find
什麼也沒有返回。
我該怎麼辦?如果存在一個目錄在bash
我試圖讓這個呼叫殼牌:分析迴歸
TMP=$(find /mydir/ -type f -mmin +1440 | xargs rm -f)
M=$?
的結果不幸的是,如果/mydir/
不存在的$?
結果仍然是「0
」,像有沒有問題。我想得到而不是'0
'如果find
什麼也沒有返回。
我該怎麼辦?如果存在一個目錄在bash
檢查:
if [ ! -d "mydir" ]; then
exit 1 #or whatever you want, control will stop here
fi
TMP=$(find /mydir/ -type f -mmin +1440 | xargs rm -f)
...
您可以啓用bash
的pipefail
選項。文檔(來自help set
):
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
所以,你可以寫爲:
set -o pipefail
TMP=$(find /mydir/ -type f -mmin +1440 | xargs --no-run-if-empty rm -f)
M=$?
set +o pipefail
而且,你爲什麼裏面$(...)
執行你的命令find
?如果您不希望它輸出錯誤,請將STDERR重定向到/dev/null
,並且最好將-r
或--no-run-if-empty
標誌用於xargs
,以避免在未接收到來自管道的任何輸入時運行該命令。
您的'rm' cmd上的'-f'可能會覆蓋任何有關「錯誤 - ish」條件的報告。祝你好運。 – shellter
dupe of http://stackoverflow.com/questions/14923387/is-there-a-way-to-catch-a-failure-in-piped-commands其本身就是http://stackoverflow.com/questions/1550933 /追趕錯誤碼功能於一個殼管 –