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 cat
subproceso, ni siquiera es necesario envolverlo en un bucle.
Respuesta2
Lo siguiente serviría:
while read -r LINE ; do
echo "$LINE" >> texttest.txt
done
- no es necesario tocar el archivo primero
- no es necesario inicializar la
LINE
variable - Ctrl+Dcierra la entrada estándar, lo que hace que
read
la salida sea con un código de salida no nulo (falso)