Linux のシェル スクリプトで失敗したコマンドのエラー コードをキャッチしようとしています。この場合、私の ffprobe コマンド:
#!/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
一時ファイルを作成するハックのようですか?これが唯一のオプションである場合、これを変数にどのように格納しますか?