
Preciso escrever um script que adicione uma linha a um arquivo de texto se Enterfor pressionado.
Mas, se Ctrl+ Dfor pressionado, preciso sair desse loop no bash.
touch texttest.txt
LINE="0"
while true; do
read LINE;
if [ "$LINE" == "^D" ]; then
break
else
echo "$LINE" >> texttest.txt
fi
done
Atualmente tenho algo assim, mas não consigo descobrir como saio do loop while quando Ctrl+ Dé pressionado em vez de Enter.
Responder1
Você está pensando demais. Tudo que você precisa é isto:
cat > texttest.txt
Cat lerá STDIN se você não disser diferente. Como está lendo STDIN, ele reagirá ao caractere de controle Ctrl+ Dsem que você precise especificá-lo. E como Ctrl+ D é a única coisa que finalizará o cat
subprocesso, você nem precisa envolvê-lo em um loop.
Responder2
O seguinte faria:
while read -r LINE ; do
echo "$LINE" >> texttest.txt
done
- você não precisa tocar no arquivo primeiro
- você não precisa inicializar a
LINE
variável - Ctrl+Dfecha stdin, o que faz
read
a saída com código de saída não nulo (falso)