提问人:phil_rawlings 提问时间:12/16/2022 最后编辑:Cyrusphil_rawlings 更新时间:12/16/2022 访问量:89
如何从通过管道传输到 bash 的脚本中读取用户输入
How to read user input from a script piped to bash
问:
我想从 bash 脚本内部读取用户输入:test.sh
#!/bin/bash
read -p "Do you want to continue? (y/n) " yn
case $yn in
[yY] ) echo "Doing stuff...";
echo "Done!";;
[nN] ) echo "Exiting...";
exit;;
* ) echo "Invalid response";;
esac
当直接使用其中一种运行脚本时,这可以正常工作。./test.sh
bash test.sh
但是,我想从 URL 运行此脚本(嗯,它的更复杂版本),所以我像这样调用它:
curl -s https://<myurl>/test.sh | bash -s
这将运行脚本,但它只显示 ,没有其他任何内容(甚至不打印“是否要继续?”消息)。我知道这是因为 curl 的 stdout 通过管道传输到 bash 的 stdin,但在这种情况下如何读取用户输入?Invalid Response
为了完整起见,如果脚本保存在本地,我也会得到相同的行为,并且我这样做:
bash < test.sh
答:
1赞
Cyrus
12/16/2022
#1
我建议将
read -p "Do you want to continue? (y/n) " yn
跟
read -p "Do you want to continue? (y/n) " yn </dev/tty
以防止从(您的管道)读取。read
stdin
评论
yn
curl -s https://<myurl>/test.sh | head -n 1| tee| bash -s