2016-11-29 19 views
0
unzip /test_data/sample.ZIP -d /data/Traget/ 
if [ "$?" = 1 ]; then 
    echo " Unzipping of files failed" 
    exit 1 
fi 

スクリプトはデータをアーカイブしていますが、ディレクトリ/ data/Traget /には書き込みアクセスがないのでスクリプトが失敗しています... 。しかし、その投げていない状態が1 は、誰かがUnixコマンドが失敗しましたが、状態を返しています0

サンキュー助けてもらえ

+1

実際に返されたステータスを確認しましたか?成功すれば0を返しますが、失敗の場合は別のコードを返すのが通例です。おそらくあなたのunzipコマンドが2または3を返しましたか? – nos

答えて

0

それよりもそんなに簡単です:

set -e 
set -o pipefail 

unzip /test_data/sample.ZIP -d /data/Target/ 

すべてバッシュSCRIこれらの2つのオプションから始める必要があります。それらが何をするかは、単一のコマンドが失敗した場合にエラーでスクリプトを終了させることです。

誰もが覚えているのは、VBAの嫌な "On Error Resume Next"の反対です!

しかし、あなたが本当にどこにでも面倒なエラー処理コードを記述する必要がある場合、あなたはそれをこのように行いたい:

if ! unzip /test_data/sample.ZIP -d /data/Traget/; then 
    echo " Unzipping of files failed" 
    exit 1 
fi 
0

あなたのロジックを逆にする必要があります。 unzipは、成功した場合は0を返し、エラーの場合は任意の数の終了コードを返します。だから、それを作る:

unzip /test_data/sample.ZIP -d /data/Traget/ 
if [ "$?" -ne 0 ]; then 
    echo " Unzipping of files failed" 
    exit 1 
fi 

あなたは簡単にあなたから終了ステータスを知りたいコマンドの後 echo $?を実行して、あまりにも収益を解凍何を自分で確認することができます。それは、このように失敗したときに戻って50を解凍し

$ unzip dd.zip -d /tmp/a/b/ 
Archive: dd.zip 
error: cannot create /tmp/a/b/filename 
     Permission denied 
$ echo $? 
50 

は、ここで私は、同様のコマンドを実行したときに何が起こるかです。

関連する問題