Un aspecto de este problema no se trata realmente awk
, y solo un poco sobre el shell. El problema es que, en un tty canónico estándar, la mayoría de las veces la disciplina de tty del kernel está amortiguando su entrada, simplemente haciéndola eco en su pantalla y en ningún otro lugar, para que pueda manejar eficientemente el retroceso y cosas por el estilo.
Sin embargo, cuando presiona Intro o ingresa una nueva línea, todos esos datos almacenados en el búfer se envían a la vez a la aplicación de lectura, generalmente su shell. Puede observar esto observando $PS2
después de ingresar una cita pendiente. Cuando el shell se imprime $PS2
es porque solo lee un bloque de su entrada y aún no está convencido de que haya terminado.
Por lo tanto, para mayor comodidad, lo que necesita es alguna forma de enviar una línea \n
electrónica al búfer de terminal sin tener que presionar toda esa otra entrada de inmediato. La forma estándar de hacerlo es con la secuencia de teclas CTRL+V
, que cita para el terminal su próximo carácter de entrada. Hacer CTRL+V
a continuación, CTRL+J
- porque esta última es por lo general cómo escribir un literal \n
ewline. Sabrás que funciona cuando no ves $PS2
porque el shell todavía no ha leído tu entrada.
Nota sin embargo que cuando no leyó que la entrada de su anterior CTRL+V
habrá hecho ninguna diferencia para la cáscara del todo - que sólo lo cita para la línea-disciplina. Definitivamente querrás citar la nueva línea para hacer algo significativo con ella.
Por cierto, CTRL+V
se puede aplicar útilmente de otras maneras, por ejemplo, "$(printf \\33)"
no es la única forma de escribir un ESC
personaje en un script de shell, y ni siquiera es la más simple. Literalmente, puede ingresar cualquier carácter que su teclado enviará sin que el controlador de entrada intente interpretarlo si primero lo escapa de esta manera.
A menudo me gusta usar <tab> s en la línea de comandos sin que el shell intente completar nada. Debido a que los shells que completan generalmente configurarán <tab> de una manera que stty eol \t
, para que sus sistemas de finalización funcionen, CTRL+V
me funciona incluso en entornos desconocidos.