La parte completa de la página de manual de Bash que es aplicable solo dice:
Si el sistema operativo en el que se ejecuta bash admite el control de trabajos, bash contiene funciones para usarlo. Al escribir el carácter de suspensión (generalmente ^ Z, Control-Z) mientras se está ejecutando un proceso, el proceso se detiene y el control vuelve a bash. Al escribir el carácter de suspensión retrasada (generalmente ^ Y, Control-Y), el proceso se detiene cuando intenta leer la entrada del terminal y el control vuelve a bash. El usuario puede manipular el estado de este trabajo, utilizando el
bg
comando para continuarlo en segundo plano, elfg
comando para continuar en primer plano, o el comando kill para matarlo. A ^ Z entra en vigencia inmediatamente y tiene el efecto secundario adicional de causar que se descarte la salida pendiente y la escritura anticipada.
Nunca he usado Ctrl- Y; Acabo de enterarme de eso. He hecho bien solo con Ctrl- Z(suspender).
Estoy tratando de imaginar lo que esta opción es para . ¿Cuándo sería útil?
(Tenga en cuenta que esta característica no existe en todas las variantes de Unix. Está presente en Solaris y FreeBSD pero no en Linux. La configuración correspondiente es stty dsusp
).
Tal vez menos subjetivamente: ¿Hay algo que se puede lograr con Ctrl- Yque no se puede lograr con la misma facilidad con Ctrl- Z?
fuente
stty dsusp
, no he logrado que envíe un SIGTSTP a ^ Y (lo hice en Solaris). ¿Tienes?Respuestas:
Del manual de 4BSD para csh :
Por lo tanto, el propósito es escribir múltiples entradas mientras se procesa la primera, y hacer que el trabajo se detenga después de que hayan terminado.
fuente
^Y
lectura se leerá con éxito, y luego, cuando^Y
se presione, el proceso se detendrá. ¿Estoy leyendo esto bien?^Y
, incluso si ha rechazado el proceso y cerrado su terminal antes de que se reanude el proceso. ¿Correcto? ( "... después de que se reanude que recibe la entrada de delante ^ Y." Eso es lo que quería decir, yo no suelen tratar en código C.) :)Digamos que hay un ciclo de lectura de entrada y ejecución. Puede ser útil dejar que la tarea finalice la instrucción actual que calcula, sin interrumpirla antes de que vuelva a la línea de comando para obtener una nueva. Entonces, para terminar un ciclo. Esto finaliza el bucle con gracia y evita que se ejecute nuevamente si
read
está bajo una restricción de tiempo de espera.fuente
^Z
hacerlo entonces .Puedo pensar en un escenario en el que podría ser útil, pero es algo así como un caso extremo artificial.
Suponga que está depurando un script que está escribiendo archivos temporales que desea analizar antes de que se eliminen como parte de una rutina de limpieza.
Puede agregar un
read foo
archivo en algún lugar después de escribir los archivos (pero antes de la limpieza), ejecutar el script y presionar Ctrl, a Ymedida que se generan. Luego, se lo dirigirá a un mensaje con el script suspendido en segundo plano para hacer lo que sea necesario y luegofg
podrá permitir que se complete el script.fuente
^Z
. En otras palabras: después de escribirfg
, tendrá que dar alguna entrada al script de todos modos antes de que continúe. De ahí mi pregunta; Todavía no veo el punto de^Y
. (¡Sin embargo, gracias por responder!) :)El único escenario en el que puedo pensar (e incluso no me parece muy convincente), es si desea utilizar algún tipo de escritura anticipada para un comando de shell. Digamos que se está ejecutando algún comando que leerá la entrada en algún momento en el futuro. Luego puede ^ Y, y luego escriba inmediatamente el siguiente comando de shell que desea ejecutar cuando se suspende el comando en ejecución. No creo haber usado esto realmente en varias décadas usando BSD Unix.
fuente