0
我試圖在Linux上的shell腳本中捕獲失敗命令的錯誤代碼。在這種情況下我ffprobe命令:在一行上檢查與多個命令的shell腳本錯誤
#!/bin/sh
videoduration=$(ffprobe -loglevel error -show_format myfile.avi | grep duration | cut -d= -f2)
if [ $? -ne 0 ]; then
echo "ERROR"
exit 1
fi
echo $videoduration
如果我更改命令給一個假的文件名:
#!/bin/sh
videoduration=$(ffprobe -loglevel error -show_format myfile.av | grep duration | cut -d= -f2)
if [ $? -ne 0 ]; then
echo "ERROR"
exit 1
fi
echo $videoduration
錯誤代碼是沒用的,因爲這裏的技術狀態代碼仍爲0碼將仍然有一個成功grep
和cut
。如何將此命令保存在單個變量中,但如果ffprobe命令失敗,則會退出並顯示錯誤消息?
編輯:我更喜歡非殼特定的答案,如果有的話。另外,建議重複涵蓋了類似的情況,但這裏的唯一潛在的選擇是創建一個臨時文件,像這樣:
f=`mktemp`
(ffprobe ...; echo $?>$f) | ...
e=`cat $f` #error in variable e
rm $f
看起來像一個黑客創建一個臨時文件?如果這是唯一的選擇,我將如何將它存儲在一個變量?
我不這麼認爲。我更喜歡非特定於shell的答案。我會相應地編輯。 – Tom 2013-04-04 03:40:50