使用 read 的 Bash 脚本需要在 Ctrl+D 上停止执行

使用 read 的 Bash 脚本需要在 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

目前有类似的东西,但无法弄清楚当按下Ctrl+D而不是时我如何退出 while 循环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关闭标准输入,这使得read以非空(假)退出代码退出

相关内容