我可以让“有停止的工作”更难被消灭吗?

我可以让“有停止的工作”更难被消灭吗?

典型场景:

我暂时需要访问我的虚拟主机阻止我访问的文件。我启动 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 缓冲区。

相关内容