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

2

Eu preciso escrever um script que irá adicionar uma linha a um arquivo de texto se Enter for pressionado.

Mas, se Ctrl + D for pressionado, eu 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 parecido com isto, mas não consigo descobrir como eu saio do loop while quando Ctrl + D é pressionado em vez de Enter .

    
por NDIrishman23 12.10.2014 / 21:00

2 respostas

5

Você está pensando demais nisso. Tudo que você precisa é isto:

cat > texttest.txt

Cat lerá de STDIN se você não tiver dito diferente. Como ele está lendo STDIN, ele reagirá ao caractere de controle Ctrl + D sem que você precise especificá-lo. E como o Ctrl + D é a única coisa que terminará o sub-processo cat , você não precisa nem envolvê-lo em um loop.

    
por 12.10.2014 / 21:19
3

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 variável LINE
  3. Ctrl + D fecha stdin, o que torna read com código de saída não nulo (falso)
por 12.10.2014 / 21:13