で以下man zsh
を見ることができます。
[...]もう一度終了しようとすると、シェルは再び警告しません。このオプションを設定する
SIGHUP
と、HUP
保留中のジョブが終了し、実行中のジョブにシグナルが表示されます。
zsh
ジョブがバックグラウンドで実行されている場合、そのジョブが終了するのを防ぐ方法はありますか?
答え1
ソースコードを見ると直接的な方法はないようです。バックグラウンドジョブの確認は次のとおりです。zexit
、デフォルトのzshプロセスがfrom exit
、from logout
、ファイルの終わり、またはさまざまな状況で終了を試みることを決定したときに呼び出されます。終了コマンドをキャンセルするにはstopmsg
0でなければなりません。stopmsg
2「(実行中|一時停止|中止)ジョブがあります」という警告が表示された後。唯一の方法stopmsg
はドアを閉めるだけです。コマンド実行の準備(空でないコマンドラインから)二重。したがって、を実行すると、exit
次に入力するコマンドはシャットダウン保護されません。
exit
後でリセットするために、no-opコマンドを偽造できる組み込み関数に接続する方法(または関数などに置き換える方法)は思い出されませんstopmsg
。
組み込み機能を無効にしexit
たり、タスクがあるかどうかを確認する機能に置き換えることができます。
function exit {
emulate -L zsh
setopt extended_glob
if [[ -n ${jobstates[(r)s*]} ]]; then
echo "you have suspended jobs"
return 1
fi
if [[ -n ${jobstates[(r)^done:*]} ]]; then
echo "you have running jobs"
return 1
fi
builtin exit "$@"
}
exit
ただし、これは他の方法ではなく、これにのみ機能します。
ファイルの終わりには、次のことができますsetopt ignore_eof
。