deshabilitar el control de trabajo en bash (CTRL-Z)

12

A veces me sucede que presiono CTRL+ Zpor accidente y mi aplicación desaparece en segundo plano. Lo sé, puedo traerlo de vuelta fg, así que no es tan importante. Pero me pregunto acerca de apagar esto job controlde todos modos. En toda mi vida, no puedo recordar una instancia cuando la necesitaba, solo me parece una reliquia del pasado.

¿Está bien deshabilitarlo por job controlcompleto? ¿O me estoy perdiendo algo y esta característica puede ser útil? ¿Cómo lo deshabilitaría en mi.bashrc

ACTUALIZAR:

He intentado set +msegún lo sugerido por @Falsenames. Sin embargo, esto solo funciona cuando lo escribo en la terminal. Agregar set +ma mi .bashrcno tiene ningún efecto.

Martin Vegter
fuente
1
Actualización: el hecho de que $-(lista de opciones activas) ya no contiene mcuando coloca set +men su ~/.bashrcsugiere que Bash está tratando de desactivar el control de trabajo, pero al final no lo hace debido a un error , puede valer la pena informar a través de [email protected]
mklement0

Respuestas:

8

Puede agregar lo siguiente en su línea de comando para dejar de usar el modo de monitoreo.

conjunto + m

Si realmente necesita la funcionalidad ctrl-z más tarde, puede escribir 'set -m' para habilitar la supervisión de esa sesión.

De hombre bash . Tenga en cuenta que esto es para '-m', con "+ m" alternando esa configuración para deshabilitarla.

set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] 
....
-m
    Monitor mode. Job control is enabled. This option is on by default for interactive
    shells on systems that support it (see JOB CONTROL above). Background processes 
    run in a separate process group and a line containing their exit status is printed
    upon their completion. 

Como último esfuerzo, es posible que desee compilar manualmente una versión de bash sin el indicador "--enable-job-control". Aquí hay una guía de instalación rápida de GNU. Si elige seguir esta ruta, NO reemplace / bin / bash en caso de que los procesos en segundo plano se ejecuten a través de bash y esperen el control del trabajo. En su lugar, cree un /bin/bash.alt u otro archivo. Su shell predeterminado se puede cambiar a este alternativo ejecutando usermod o editando / etc / passwd como root.

Falsenames
fuente
set +mfunciona en la terminal, pero cuando lo agrego a mi .bashrc, no tiene ningún efecto.
Martin Vegter
Ah, tienes razon. Eso está localizado en el script específico en ese punto. Entonces bash afirma sus valores predeterminados.
Falsenames
compilar mi propio bash parece un precio bastante alto por deshabilitar el control del trabajo. Debe haber alguna configuración que funcione a través de .bashrc.
Martin Vegter
Como todo esto está configurado en tiempo de compilación, no necesariamente tiene que haber una manera de cambiarlo en un archivo de configuración que se carga después de que el shell comience a ejecutarse. El problema aquí es que alguien decidió compilar bash WITH control de trabajo habilitado como predeterminado para la distribución que está utilizando. Realmente no puedo argumentar personalmente en contra de eso, ya que uso varios controles de trabajo todos los días en el trabajo, y no estoy seguro de poder adaptarme fácilmente a la vida sin él. De acuerdo, esa es mi experiencia, no la suya ... es por eso que hay banderas en la compilación, para dar opciones.
Falsenames
4

stty susp undefdeshabilitará la señal de suspensión iniciada por el teclado para la mayoría de los programas, sin embargo, los comandos como vimy emacsque tienen enlaces específicos para Ctrl-Zdeberán ser reconfigurados individualmente.

Puede agregar ese comando stty a su ~/.bash_profileo ~/.profile, cerrar sesión, iniciar sesión nuevamente.

Mark Plotnick
fuente
Esto realmente funciona para algunos programas. Pero, por ejemplo mc, porque no funciona. Lo que básicamente confirma lo que dijiste. ¿No hay una solución universal que funcione para todos?
Martin Vegter
Acabo de notar que set +mfunciona mc, pero solo si lo escribo en la terminal, no en .bashrco .profile.
Martin Vegter
3

¿O me estoy perdiendo algo y esta característica puede ser útil?

Para responder a esta parte de la pregunta: Cz / fgcombo es esencial para mi flujo de trabajo de vim. Por ejemplo, prefiero Cz git commit>> fga usar git wrappers desde vim.

Cz ayuda a tratar el shell como IDE, conforme al principio de " hacer una cosa ". (Esto en lugar de "editor como IDE").

denten
fuente
1
^Zes absolutamente útil, pero fue aún más útil cuando un terminal no era una ventana, sino una caja frente a usted. Y solo tenías uno.
Volker Siegel
2

Agrega trap "" SIGTSTPtu guión. Capturará la señal y la ignorará.

#!/bin/bash
trap "" SIGTSTP
watch date
donde23
fuente