use*_*849 9 shell bash background-process
典型场景:
我暂时需要访问我的虚拟主机阻止我访问的文件。我启动 vim,编辑设置和后台 vim 以告诉 apache 重新加载其配置。
问题:
如果我现在忘记了这一点,当我 CTRL+D 会话时,我的 shell 会告诉我“有停止的作业”。但是,由于我有在shell中shell中有shell的习惯,由于ssh,tmux等类似,我也经常在我结束工作并关闭我的windows时反复发送EOF。尽管有警告,这反过来又导致我不小心杀死了外壳。
我可以让杀死这些贝壳变得更难吗?
cam*_*amh 10
如果您正在使用bash,则可以将IGNOREEOFshell 变量设置为一个数字,该数字指定在将 EOF 视为退出信号之前,shell 应忽略多少个连续的 EOF 字符。查看手册页了解详细信息。
但是,它会在“有停止的作业”消息触发之前触发,因此您仍然遇到相同的问题 - 您收到该消息,并且还有一个 ^D 退出外壳程序。
如果该数字大于零,另一种方法是将 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}..."
Run Code Online (Sandbox Code Playgroud)
在此之后,外壳可能看起来像 ...[1] ...
如果工作计数大于零,则会在您的提示中添加工作计数。这使您可以轻松查看何时有未完成的作业,并且运行良好(对我而言)作为作业仍在运行的视觉提醒。