Bash Script usando leitura precisa parar de executar em Ctrl + D

Bash Script usando leitura precisa parar de executar em Ctrl + D

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 catsubprocesso, você nem precisa envolvê-lo em um loop.

Responder2

O seguinte faria:

while read -r LINE ; do
  echo "$LINE" >> texttest.txt
done
  1. você não precisa tocar no arquivo primeiro
  2. você não precisa inicializar a LINEvariável
  3. Ctrl+Dfecha stdin, o que faz reada saída com código de saída não nulo (falso)

informação relacionada