¿Puedo hacer que "Hay trabajos detenidos" sea más difícil de eliminar?

¿Puedo hacer que "Hay trabajos detenidos" sea más difícil de eliminar?

Escenario típico:

Necesito acceder temporalmente a un archivo al que mi vhost me impide acceder. Enciendo vim, edito la configuración y vim en segundo plano para decirle a Apache que recargue su configuración.

Problema:

Si ahora me olvido de esto, mi shell me dirá "Hay trabajos detenidos" cuando presione CTRL+D en la sesión. Sin embargo, dado que tengo la costumbre de tener shells en shells en shells, debido a ssh, tmux y similares, con frecuencia también envío EOF repetidamente cuando termino mi trabajo y cierro mis ventanas. Esto, a su vez, hace que mate accidentalmente el caparazón, a pesar de la advertencia.

¿Puedo hacer que sea más difícil matar esos proyectiles?

Respuesta1

Si está utilizando bash, puede establecer la IGNOREEOFvariable del shell en un número que especifique cuántos caracteres EOF consecutivos debe ignorar el shell antes de tratar el EOF como una señal de salida. Consulte la página de manual para obtener más detalles.

Sin embargo, eso se activa antes de que se active el mensaje "hay trabajos detenidos", por lo que todavía tienes el mismo problema: recibes ese mensaje y un ^D más sale del shell.

Una alternativa es poner el número de trabajos de shell en el mensaje si ese número es mayor que cero.

Por ejemplo, un extracto de mi .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}..."

Después de esto, el caparazón puede verse como...[1] ...

Eso incluye un recuento de trabajos en su mensaje si es mayor que cero. Esto hace que sea más fácil ver cuándo tienes trabajos incompletos y funciona bien (para mí) como recordatorio visual de que los trabajos aún se están ejecutando.

Respuesta2

Basado en la respuesta anterior se me ocurrió esto.

PROMPT_COMMAND=protect_bg_jobs

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

Oculta el mensaje "Hay trabajos detenidos" pero guardará mis buffers vim.

información relacionada