我可以讓「有停止的工作」更難被消滅嗎?

我可以讓「有停止的工作」更難被消滅嗎?

典型場景:

我暫時需要存取我的虛擬主機阻止我存取的檔案。我啟動 vim,編輯設定和後台 vim 以告訴 apache 重新載入其配置。

問題:

如果我現在忘記了這一點,當我按 CTRL+D 會話時,我的 shell 會告訴我「有已停止的作業」。然而,由於我有殼中殼中殼的習慣,由於 ssh、tmux 等類似的原因,當我結束工作並關閉視窗時,我也經常重複發送 EOF。這反過來又導致我不小心殺死了 shell,儘管有警告。

我可以增加殺死這些砲彈的難度嗎?

答案1

如果使用bash,則可以將IGNOREEOFshell 變數設為一個數字,該數字指定 shell 在將 EOF 視為退出訊號之前應忽略多少個連續的 EOF 字元。檢查手冊頁以了解具體資訊。

但是,該事件在「有已停止的作業」訊息觸發之前觸發,因此您仍然遇到相同的問題 - 您收到該訊息,並且又一個 ^D 退出 shell。

另一種方法是,如果 shell 作業的數量大於零,則將其放入提示符號中。

例如,我的 .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] ...

如果作業計數大於零,則會在提示中顯示作業計數。這使得您可以輕鬆看到何時有未完成的作業,並且(對我來說)效果很好,作為作業仍在運行的視覺提醒。

答案2

根據之前的答案我想出了這個

PROMPT_COMMAND=protect_bg_jobs

protect_bg_jobs()
{
    if [ "$(jobs)" == "" ]; then
        set +o ignoreeof
    else
        set -o ignoreeof
    fi
}

它隱藏了「有停止作業」訊息,但它會保存我的 vim 緩衝區。

相關內容