¿Es incorrecto usar CTRL + C para volver a la línea de comando?

27

Cuando estoy usando tail -fy quiero volver al shell, siempre uso CTRL+C. O cuando estoy escribiendo un comando y tengo ganas de abortarlo y comenzar de nuevo, simplemente CTRL+Cvuelvo a una línea de comando vacía. ¿Se considera esto una mala práctica? A veces siento que podría haber una mejor manera de separarse de algo, pero realmente no tengo idea.

Reinstalar a Mónica
fuente
66
Para cancelar un comando de shell ingresado parcialmente, puede usar Control-U o Eliminar (según la configuración de tty y las combinaciones de teclas), pero no hay nada de malo en usar Control-C.
Keith Thompson
@KeithThompson gracias por Ctrl + U, no estaba al tanto de eso :-)
Patrick
Para el registro, Cu en realidad no cancela el comando ingresado, lo mueve al búfer de pegado (similar a la funcionalidad de "corte" de algunos programas).
Chris Down

Respuestas:

36

Ctrl+ Cenvía una SIGINT al programa. Esto le dice al programa que desea interrumpir (y finalizar) su proceso. La mayoría de los programas captan esto correctamente y salen limpiamente. Entonces, sí, esta es una forma "correcta" de finalizar la mayoría de los programas.

Existen otros métodos abreviados de teclado para enviar otras señales a los programas, pero este es el más común.

Chris S
fuente
99
También hay Ctrl + D para programas que leen la entrada del usuario. Ctrl + D cierra STDIN al programa. Para salir con gracia del shell, esto también está disponible (exactamente igual que escribir exit).
Patrick
2
@Patrick Ctrl + D en realidad envía un indicador de Fin de archivo a la secuencia. Depende del programa responder adecuadamente (generalmente cerrando la secuencia del archivo).
Chris S
eso es lo que hace el cierre de STDIN. No puede obtener EOF sin que la tubería / corriente esté cerrada.
Patrick
99
Mal en tres cuentas, Patrick. Primero: Control + D no tiene este significado para las tuberías. Segundo: el personaje especial EOF no cierra nada. Provoca un retorno único de cero bytes (suponiendo que el búfer de línea está vacío) de la read()llamada actual del sistema. Los siguientes read()s no se ven afectados. Tercero: nada de esto se aplica a los programas que ponen la disciplina de línea en modo no canónico, como la mayoría de los programas de shell de las últimas dos décadas y, de hecho, cualquier otro programa que use una biblioteca como GNU readline.
JdeBP
13

Este método está bien, de verdad.

Sven
fuente
11

Para abortar un comando largo mientras escribo, a veces salto al inicio de la línea e inserto un signo de comentario, antes de presionar enter:

Home#Enter

Pos1#Return

Esto es útil, si escribí un comando de copia con una ruta larga, por ejemplo, y mientras tanto, observo que primero necesito crear el directorio, pero me gustaría repetir el comando después. Luego solo tengo que tomarlo del historial, eliminar el hash e ingresarlo.

En Bash, puedes usar el atajo

Alt+#

para comentar su comando, como se señala en los comentarios (Gracias, @Zorawar).

usuario desconocido
fuente
66
También puede usar Ctrl-Asin quitar los dedos de la fila de inicio.
Dietrich Epp
1
Y Ctrl-Eva hasta el final, por cierto.
Dave
@Dave: Eso es correcto, pero no necesita moverse hasta el final para presionar enter, para confirmar su comando. La línea de comandos no es un editor, donde esto podría insertar una nueva línea.
usuario desconocido
2
En bash, puede lograr lo mismo con solo presionar Alt-#: colocará el comentario y ejecutará el comando (por lo que lo incluirá en su historial).
Zorawar
8

En términos generales, usar Ctrl+ Cestá bien cuando el programa no le ofrece una forma interactiva de terminar (ya sea por diseño o, más frecuentemente, porque se ha congelado o ha quedado inutilizable). Solo tenga en cuenta que, cuando está en modo interactivo, la combinación de teclas que realmente desea puede ser Ctrl+ D, que envía un EOF, señalando el final de la entrada.

Zorawar
fuente
1

Si usa Bash, también puede usar Ctrl- Zy escribir bgpara "poner el trabajo actual en segundo plano".

Computista
fuente
0

Como @Patrick dijo en el comentario sobre la respuesta aceptada,

También hay Ctrl+Dpara programas que leen la entrada del usuario. Ctrl+Dcierra STDIN al programa.

Esto me ayudó cuando Ctrl+Cno funcionó para recuperar la línea de comando después de usar>>

enarmónico
fuente