Могу ли я сделать так, чтобы «Есть остановленные работы» было сложнее уничтожить?

Могу ли я сделать так, чтобы «Есть остановленные работы» было сложнее уничтожить?

Типичный сценарий:

Мне временно нужно получить доступ к файлу, к которому мой vhost не позволяет мне получить доступ. Я запускаю vim, редактирую настройки и фоновый vim, чтобы сказать apache перезагрузить его конфигурацию.

Проблема:

Если я сейчас забуду об этом, моя оболочка скажет мне "There are stopped jobs", когда я нажму 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] ...

Это помещает счетчик заданий в ваш запрос, если он больше нуля. Это позволяет легко увидеть, когда у вас есть незавершенные задания, и хорошо работает (для меня) как визуальное напоминание о том, что задания все еще выполняются.

решение2

На основе предыдущего ответа я придумал это

PROMPT_COMMAND=protect_bg_jobs

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

Он скрывает сообщение «Имеются задания по остановке», но сохраняет мои буферы vim.

Связанный контент