私はエラーにつながる単純な関数を持つ単純なスクリプトを持っています。のは、この関数を定義してみましょう、それが壊れますセット-eの設定を内側に保持||または&&
brokenFunction() {
ls "non-existing-folder"
}
我々はそれが壊れている場合、それはうまく動作検出ブロックでこの機能を実行すると:「それが壊れている」
brokenFunction || printf "It is broken\n"
プリント
それでは、最後に正しいコマンドを追加することで、もう少し複雑な関数を作ってみましょう:
#!/bin/sh
brokenFunction() {
ls "non-existing-folder"
printf "End of function\n"
}
brokenFunction || printf "It is broken\n"
のこのスクリプトを印刷:
$ ./script.sh
ls: cannot access 'non-existing-folder': No such file or directory
End of function
私はprintf文の前に停止する機能、および「それが壊れている」を表示するには、次のブロックを期待しながら。
そして、私はbrokenFunction
の終了ステータスコードをチェックすると確かに、それは私がスクリプトの先頭にset -e
を追加しようとした0
です。動作は変わりませんが、||
なしで呼び出された場合、終了コードはbrokenFunction
となり、2
になります。それと共に呼び出された場合、ステータスコードはまだ0
です。
set -e
の設定を||
という名前の関数内に保持する方法はありますか?
EDIT:この例の機能が役に立たないことに気付きました。私は単純なブロックと条件で同じ問題に遭遇する。
#!/bin/sh
set -e
{
ls "non-existing-dir"
printf "End of block\n"
} || {
printf "It is broken\n"
}
プリント
man bash
で書かれたよう
$ ./script.sh
ls: cannot access 'non-existing-dir': No such file or directory
End of block
私はそれが期待通りに動作しない理由を見つけます。https:/ /unix.stackexchange.com/questions/65532/why-does-set-e-not-work-inside今、私はただクリーンなソリューションを探しています。 – Dunatotatos