Bash Script que usa lectura debe dejar de ejecutarse en Ctrl+D

Bash Script que usa lectura debe dejar de ejecutarse en Ctrl+D

Necesito escribir un script que agregue una línea a un archivo de texto si Enterse presiona.

Pero, si se presiona Ctrl+ D, necesito salir de ese bucle en bash.

touch texttest.txt
LINE="0"
while true; do
    read LINE;
    if [ "$LINE" == "^D" ]; then
            break
    else
            echo "$LINE" >> texttest.txt
    fi
done

Actualmente tengo algo como esto, pero no puedo entender cómo puedo salir del bucle while cuando se presiona Ctrl+ en lugar de .DEnter

Respuesta1

Lo estás pensando demasiado. Todo lo que necesitas es esto:

cat > texttest.txt

Cat leerá STDIN si no le has dicho lo contrario. Como lee desde STDIN, reaccionará al carácter de control Ctrl+ Dsin que tengas que especificarlo. Y dado que Ctrl+ D es lo único que finalizará el catsubproceso, ni siquiera es necesario envolverlo en un bucle.

Respuesta2

Lo siguiente serviría:

while read -r LINE ; do
  echo "$LINE" >> texttest.txt
done
  1. no es necesario tocar el archivo primero
  2. no es necesario inicializar la LINEvariable
  3. Ctrl+Dcierra la entrada estándar, lo que hace que readla salida sea con un código de salida no nulo (falso)

información relacionada