kyo*_*kyo 13 linux bash shell curl
我有一个简单的bash脚本,它接受输入并输出几行输入
fortinetTest.sh
read -p "Enter SSC IP: $ip " ip && ip=${ip:-1.1.1.1}
printf "\n"
#check IP validation
if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "SSC IP: $ip"
printf "\n"
else
echo "Enter a valid SSC IP address. Ex. 1.1.1.1"
exit
fi
Run Code Online (Sandbox Code Playgroud)
我试图将它们上传到我的服务器,然后尝试通过它运行它 curl
当我使用cURL/wget时,不确定为什么输入提示永远不会启动.
我错过了什么吗?
如何进行并进一步调试?
我现在对任何建议持开放态度.
任何提示/建议/帮助将非常感谢!
gle*_*man 17
使用curl ... | bash表单,bash的stdin正在读取脚本,因此stdin不可用于该read命令.
尝试使用Process Substitution像本地文件一样调用远程脚本:
bash <( curl -s ... )
Run Code Online (Sandbox Code Playgroud)
您可以通过运行下面的脚本简单地重现您的问题
$ cat test.sh | bash
Enter a valid SSC IP address. Ex. 1.1.1.1
Run Code Online (Sandbox Code Playgroud)
这是因为你使用a启动的bash pipe没有得到a TTY,当你执行a时,read -p它是从这种情况下读取的stdin内容test.sh.所以问题不在于卷曲.问题不是从tty读取
所以解决方法是确保你从tty准备它
read < /dev/tty -p "Enter SSC IP: $ip " ip && ip=${ip:-1.1.1.1}
printf "\n"
#check IP validation
if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "SSC IP: $ip"
printf "\n"
else
echo "Enter a valid SSC IP address. Ex. 1.1.1.1"
exit
fi
Run Code Online (Sandbox Code Playgroud)
一旦你这样做,甚至curl会开始工作
vagrant@vagrant:/var/www/html$ curl -s localhost/test.sh | bash
Enter SSC IP: 2.2.2.2
SSC IP: 2.2.2.2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |