Скрипт Bash, использующий read, должен останавливать выполнение при нажатии Ctrl+D

Скрипт Bash, использующий read, должен останавливать выполнение при нажатии Ctrl+D

Мне нужно написать скрипт, который будет добавлять строку в текстовый файл при Enterнажатии клавиши .

Но если нажать Ctrl+ D, мне нужно выйти из этого цикла в bash.

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

В настоящее время есть что-то подобное, но не могу понять, как выйти из цикла while, если нажато Ctrl+ Dвместо Enter.

решение1

Ты слишком много думаешь. Все, что тебе нужно, это:

cat > texttest.txt

Cat будет читать из STDIN, если вы не указали ему иное. Поскольку он читает из STDIN, он отреагирует на управляющий символ Ctrl+ Dбез вашего указания. И поскольку Ctrl+ D — это единственное, что завершит catподпроцесс, вам даже не нужно заключать его в цикл.

решение2

Подойдет следующее:

while read -r LINE ; do
  echo "$LINE" >> texttest.txt
done
  1. вам не нужно сначала трогать файл
  2. вам не нужно инициализировать LINEпеременную
  3. Ctrl+Dзакрывает stdin, что приводит к readвыходу с ненулевым (ложным) кодом выхода

Связанный контент