一般的なシナリオ:
Webホストがブロックするファイルに一時的にアクセスする必要があります。 vimを起動し、設定と背景vimを編集して、Apacheに設定を再ロードするように指示しました。
質問:
これを忘れた場合は、CTRL + Dセッションをクリックすると、シェルに「停止したタスクがあります」というメッセージが表示されます。しかし、シェルの中にシェルを置く習慣のため、作業を終えてssh、tmuxなどの理由でウィンドウを閉じると、繰り返しEOFが発生することがよくあります。これは警告にもかかわらず、誤ってシェルを殺した。
この発射体を殺す難易度を高めることはできますか?
答え1
を使用する場合、bash
シェル変数は、IGNOREEOF
EOFを終了信号と見なす前にシェルが無視する必要がある連続EOF文字の数を指定する数値に設定できます。具体的な情報はマニュアルページをご確認ください。
ただし、「ジョブが停止しました」というメッセージが表示される前に実行されるため、同じ問題が発生します。そのメッセージが表示され、別の^ Dがシェルを終了します。
別のアプローチは、数字がゼロより大きい場合、プロンプトにシェル操作を置くことです。
たとえば、私の.bashrcからの抜粋は次のとおりです。
PROMPT_COMMAND=prompt_command
prompt_command() {
job_count=$(jobs | wc -l)
if [ $job_count -gt 0 ] ; then
prompt_job="[$job_count] "
else
prompt_job=""
fi
}
PS1="...\${prompt_job}..."
その後、シェルは次のように見えます。...[1] ...
ジョブ数が 0 より大きい場合、ジョブ数がプロンプトに表示されます。これにより、優れたタスクがあるかどうかを簡単に確認でき、そのタスクがまだ実行中であることを視覚的に思い出させる役割を果たします。
答え2
以前の答えに基づいて、私はこれを思い出しました。
PROMPT_COMMAND=protect_bg_jobs
protect_bg_jobs()
{
if [ "$(jobs)" == "" ]; then
set +o ignoreeof
else
set -o ignoreeof
fi
}
「ジョブが停止しました」というメッセージは非表示になりますが、vimバッファは保存されます。