【发布时间】:2014-11-11 19:14:23
【问题描述】:
考虑一下这个 bash 脚本:
#!/bin/bash
while true; do
read -p "Give me an answer ? y/n : " yn
case $yn in
[Yy]* ) answer=true ; break;;
[Nn]* ) answer=false ; break;;
* ) echo "Please answer yes or no.";;
esac
done
if $answer
then
echo "Doing something as you answered yes"
else
echo "Not doing anything as you answered no"
fi
从命令行运行时使用:
$ ./script-name.sh
脚本按预期工作,等待您回答 y 或 n。
但是,当我上传到一个 url 并尝试使用 :
运行它时$ curl http://path.to/script-name.sh | bash
脚本说Please answer yes or no. 我陷入了一个永久循环,显然脚本正在接收除 y 或 n 之外的某种输入。
这是为什么?更重要的是,如何从 url 调用的 bash 脚本中实现用户输入?
【问题讨论】:
-
您已经为 shell 重定向了标准输入。这就是您的脚本的来源。因此,当 bash 尝试从标准输入中读取 more 信息时,它只会得到
EOF并旋转。 -
试试
read -p "Give me an answer ? y/n : " yn < /dev/tty。 -
好吧 cat script-name.sh | bash 也不会比你的 curl 命令更好......
-
使用 zentity ```
标签: bash shell curl command-line