予期しない入力でエラーを記録するエラーログの子スクリプトを呼び出すBash親スクリプトがあります。私はまた、エラーが発生し、エラースクリプトが呼び出されたときに実行を中止したい。しかし、エラー処理スクリプトからexit
を呼び出すと、親スクリプトが実行されなくなります。子供から親スクリプトを止める方法はありますか?Bash - 子スクリプトからの親スクリプトの終了
10
A
答えて
10
してみてください。..そう
#normal flow
[[ $(check_error_condition ]] && /some/error_reporter.sh || exit 1
、
- error_reporterが終了ステータスで終了します> 0親があまりにも を終了します
- :)(親は通常、この動作を好きではない)あなたは
stop the parent from a child
を望んでいない
... error_reporterは親が続く状態= 0で終了する場合は、あなたの代わりにtell to parent - need stop
、彼をしたいです親スクリプトで
:
trap "echo exitting because my child killed me.>&2;exit" SIGUSR1
で子供の
0
子から親を終了させないでください。代わりに子スクリプトが返された後で親にexit
を呼び出します。
if [ condition ]; then
/path/to/child.sh
exit 1
fi
または短い
[ condition ] && { /path/to/child.sh; exit 1; }
6
TRY);(必要な場合)自体を停止しますCRIPT:子スクリプトで
:
kill -SIGUSR1 `ps --pid $$ -oppid=`; exit
他の方法だった
kill -9 `ps --pid $$ -oppid=`; exit
しかし、親が殺さに関するいくつかの情報を持っている必要があるので、それは、推奨されません&必要に応じてクリーンアップを行います。
別の方法: 代わりの子スクリプトを呼び出し、exec
それは。
しかし、他の答えで指摘されているように、最もきれいな方法は、子供が戻った後に親から出ることです。
これはホラーのように見えます - 子供は親を殺す:) :)(はい、それも解決策です:)):) – jm666
^^うん。次のようにします: 'command1 | (command 2; command3) '&command3はcommand1をSIGINTでkillするはずだった:-) – anishsane