Posso tornar mais difícil eliminar "Há empregos interrompidos"?

Posso tornar mais difícil eliminar "Há empregos interrompidos"?

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 IGNOREEOFvariá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.

informação relacionada