Cenário típico:
Preciso acessar temporariamente um arquivo que meu vhost me impede de acessar. Eu inicio o vim, edito as configurações e o plano de fundo do vim para dizer ao apache para recarregar sua configuração.
Problema:
Se eu esquecer isso agora, meu shell me dirá "Há trabalhos interrompidos", quando eu CTRL+D a sessão. No entanto, como tenho o hábito de ter shells em shells em shells, devido ao ssh, tmux e similares, também envio frequentemente EOF repetidamente quando encerro meu trabalho e fecho minhas janelas. Isso, por sua vez, faz com que eu acidentalmente mate o shell, apesar do aviso.
Posso tornar mais difícil matar esses projéteis?
Responder1
Se estiver usando bash
, você pode definir a IGNOREEOF
variável do shell como um número que especifica quantos caracteres EOF consecutivos o shell deve ignorar antes de tratar o EOF como um sinal de saída. Verifique a página de manual para obter detalhes.
No entanto, isso é acionado antes da mensagem "há trabalhos interrompidos", então você ainda tem o mesmo problema - você recebe essa mensagem e mais um ^D sai do shell.
Uma alternativa é colocar o número de tarefas shell em seu prompt se esse número for maior que zero.
Por exemplo, um trecho do meu .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}..."
Depois disso, o shell pode parecer...[1] ...
Isso coloca uma contagem de trabalhos no seu prompt se for maior que zero. Isso facilita ver quando você tem trabalhos incompletos e funciona bem (para mim) como um lembrete visual de que os trabalhos ainda estão em execução.
Responder2
Com base na resposta anterior eu descobri isso
PROMPT_COMMAND=protect_bg_jobs
protect_bg_jobs()
{
if [ "$(jobs)" == "" ]; then
set +o ignoreeof
else
set -o ignoreeof
fi
}
Ele oculta a mensagem "Há trabalhos interrompidos", mas salvará meus buffers do vim.