dwk*_*kns 1 bash shell command-line curl
考虑这个 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
Run Code Online (Sandbox Code Playgroud)
从命令行运行时使用:
$ ./script-name.sh
Run Code Online (Sandbox Code Playgroud)
它按预期工作,等待您回答y或n的脚本。
但是,当我上传到 url 并尝试使用以下命令运行它时:
$ curl http://path.to/script-name.sh | bash
Run Code Online (Sandbox Code Playgroud)
我陷入了一个永久循环,脚本说Please answer yes or no.显然脚本正在接收y或n以外的某种输入。
为什么是这样?更重要的是,如何从从 url 调用的 bash 脚本中获取用户输入?
你可以像这样运行它:
bash -c "$(curl -s http://path.to/script-name.sh)"
Run Code Online (Sandbox Code Playgroud)
由于您正在向bash解释器提供 bash 脚本的内容。使用curl -s静默执行。