Мне нужно написать скрипт, который будет добавлять строку в текстовый файл при 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
- вам не нужно сначала трогать файл
- вам не нужно инициализировать
LINE
переменную - Ctrl+Dзакрывает stdin, что приводит к
read
выходу с ненулевым (ложным) кодом выхода