2016-08-19 5 views
1

スクリプト内からアーカイブを作成していて、何らかの理由で失敗した場合はいくつかのアクションを実行します。エラーが発生したにもかかわらず、Tar終了コード0「開くことができません:そのようなファイルやディレクトリはありません」

if ! sudo tar -zcf "/not/existing/dest.tar.gz" "/existing/archive/src/"; then 
    echo "Tar failed" 
fi 
echo "Tar exited with error code $?" 

次の出力が生成されます:

エラーケースをチェックするためのコードは次のようになります

tar (child): /not/existing/dest.tar.gz: Cannot open: No such file or directory 
tar (child): Error is not recoverable: exiting now 
Tar exited with error code 0 

はなぜタールは、それは明らかに失敗していても、コード0で終了されます?

いくつかの詳細に関する情報:

OS: Ubuntuの16.04
タール--version:タール(GNUタール)1.28
sudoを--version:バージョン1.8.16

+1

@Cyrusもし0でなければ 'Tar failed 'とエコーするはずです。 – Barmar

答えて

1

$?は、実行された最後のコマンドからその値をとります。

最後のechoでは、前のechoから取得しますが、もちろん正しく実行されます。

​​
+0

Hm、一見すると合理的だが、 "Tar failed"は決して印刷されないので完全に一致しない。したがって、 'echo" Tarは失敗しました "コマンドは決して実行されず、エラーコードは' tar'自体からのIMHOです...ここに何か不足していますか? – suamikim

+0

@suamikim良い点。 'sudo tar -zcf" /not/existing/dest.tar.gz "/ existing/archive/src /" 'と' echo $? 'を入力すると、0か何か他のものが得られます? – fedorqui

+0

はい、 'echo $?'コンソールの 'tar'コマンドの直後に' 0'が出力されます... – suamikim

関連する問題