ShellCheckのドキュメントSC2164を読んでいたときに、よくわからない記載があったのでどなたか解説をいただきたいです。
SC2164のコンセプトは、シェルスクリプト内で「cd
でカレントディレクトリを移動してから諸々コマンドを実行する」場合、cd
が失敗した場合を想定して処理を書いておきましょう、というものだと理解しています。
ドキュメント内のコードそのままですが、例えば、
bash
1cd generated_files || exit 2rm -r *.c
と書いておけば、cd
し損ねた状態でrm -r
してしまうリスクを回避できます。
ドキュメント内では具体的な対応例として
cd foo || exit
as suggested to abort immediately, reusing exit code from failed cd commandcd foo || { echo "Failure"; exit 1; }
abort with custom messagecd foo || ! echo "Failure"
omitting "abort with custom message"if cd foo; then echo "Ok"; else echo "Fail"; fi
for custom handling<(cd foo && cmd)
as an alternative to<(cd foo || exit; cmd)
in<(..)
,$(..)
or( )
が例示されています。
このうち、上から3つ目のcd foo || ! echo "Failure"
という書き方の意図がよくわかりません。
omitting "abort with custom message"
という付記も、文意が今一つ読み取れませんでした。
物は試しと思い、cd
が必ず失敗するようにして
bash
1cd foo || ! echo "Failure" 2echo "second line"
として実行してみたのですが、何がメリットなのかよくわかりませんでした。
cd
に失敗したときだけ"Failure"が出力されるというのはわかりますが、後続のecho "second line"
はcd
の成否に関わらず普通に実行されますし、!
無しで
bash
1cd foo || echo "Failure" 2echo "second line"
と書くのと何が違うのかもわかりません。
(一応、cd foo || ! echo "Failure"
とcd foo || echo "Failure"
でexit statusは変わりますが、後続の処理が走るのは変わらないし…)
cd foo || ! echo "Failure"
の書き方にはどのようなメリットがあるのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。