我试图在脚本中按 Ctrl D 但我弄坏了它?
I tried to press Ctrl D in script and I broke it?
我写了一个带有无限循环的简单脚本来测试一些东西。这是脚本:
#!/bin/bash
while true; do
echo -n "Give a number: "; read number
done
然后 运行 我的脚本,它仍然是 运行ning,我按了 Ctrl+D,它坏了!
这是输出:
user@DESKTOP:~$ ./test.sh
Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: ^C
我该如何防止这种情况发生?谢谢...
您希望在读取失败时跳出循环:
read number || break;
当读取检测到错误时,它returns非零,在shell中是"false"。 ||
会看到左边的 false,从而继续计算右边的值,但是当 read
成功返回零时,||
将不会计算右边的值,从而允许循环继续。
解决这个问题的优雅方法是:
while read -p 'Give a number: ' number; do
...
done
如果用户使用 Ctrl+D 关闭标准输入,则 read
命令以非零状态退出,这会导致循环退出。
不需要额外的 echo -n
; read
可以使用 -p
选项自行提示。
我写了一个带有无限循环的简单脚本来测试一些东西。这是脚本:
#!/bin/bash
while true; do
echo -n "Give a number: "; read number
done
然后 运行 我的脚本,它仍然是 运行ning,我按了 Ctrl+D,它坏了! 这是输出:
user@DESKTOP:~$ ./test.sh
Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: ^C
我该如何防止这种情况发生?谢谢...
您希望在读取失败时跳出循环:
read number || break;
当读取检测到错误时,它returns非零,在shell中是"false"。 ||
会看到左边的 false,从而继续计算右边的值,但是当 read
成功返回零时,||
将不会计算右边的值,从而允许循环继续。
解决这个问题的优雅方法是:
while read -p 'Give a number: ' number; do
...
done
如果用户使用 Ctrl+D 关闭标准输入,则 read
命令以非零状态退出,这会导致循环退出。
不需要额外的 echo -n
; read
可以使用 -p
选项自行提示。