Posso fazer com que "Há trabalhos parados" sejam mais difíceis de matar?

6

Cenário típico:

Eu temporariamente preciso acessar um arquivo que meu vhost me impede de acessar. Eu ligo o vim, edito as configurações e o background vim para dizer ao apache para recarregar sua configuração.

Problema:

Se eu esquecer agora disso, meu shell me dirá "Há trabalhos interrompidos", quando eu pressionar CTRL + D na sessão. No entanto, desde que eu tenho o hábito de ter shells em shells em shells, devido a ssh, tmux e similares, eu também freqüentemente envio repetidamente EOF quando eu envolvo meu trabalho e fecho minhas janelas. Isso, por sua vez, faz com que eu mate acidentalmente a casca, apesar do aviso.

Posso tornar mais difícil matar essas conchas?

    
por user50849 13.06.2012 / 11:20

2 respostas

9

Se você estiver usando bash , você pode definir a variável IGNOREEOF shell para um número que especifique quantos caracteres EOF consecutivos o shell deve ignorar antes de tratar o EOF como um sinal de saída. Verifique a página do manual para detalhes.

No entanto, isso é acionado antes dos disparadores de mensagens "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 trabalhos do shell em seu prompt se esse número for maior que zero.

Por exemplo, um trecho da minha .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 com ...[1] ...

Isso coloca uma contagem de tarefas em seu prompt, se for maior que zero. Isso facilita a visualização quando você tem trabalhos incompletos e funciona bem (para mim) como um lembrete visual de que as tarefas ainda estão em execução.

    
por 13.06.2012 / 12:14
0

Com base na resposta anterior, eu criei esta

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 de parada", mas salvará meus buffers de vim.

    
por 22.09.2016 / 12:36