为什么 Bash 与 Curl 一起使用时不会等待读取?
我编写了一个 Bash 脚本来配置 Git。它使用内置的 read
,但是当我这样做时:
bash < <(curl -s https://raw.github.com/gist/419201/gitconfig.bash)
它不会等待我输入输入。我怎样才能让它等待?
I wrote a Bash script to congfigure Git. It uses the read
builtin, but when I do:
bash < <(curl -s https://raw.github.com/gist/419201/gitconfig.bash)
It doesn't wait for me to enter input. How do I get it to wait?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我按照 jcomeau_ictx 的建议在没有
<
的情况下对其进行了测试,并且它有效。注意:我使用
head -3
在读取后停止执行。I tested it whitout the
<
as jcomeau_ictx suggested and it worked.Note: I used
head -3
to stop execution after the read.您可以尝试直接从控制终端
/dev/tty
读取,以重新启用用户输入,以防 stdin 已重定向,即文件描述符 0 未在终端。您甚至可以使用
test
命令的-t
选项以编程方式处理这种情况(请参阅help test
或man test< /代码>)。
You may try to
read
directly from the controlling terminal/dev/tty
to re-enable user input in case stdin is already redirected, i.e. file descriptor 0 is not opened on a terminal.You may even use the
-t
option to thetest
command to handle such a situation programmatically (seehelp test
orman test
).为了使用标准输入,您需要获取文件,例如 /tmp,然后是 bash /tmp/gitconfig.bash。您现在的做法是重定向标准输入,而 Unix 没有像 VMS 那样的用于命令输入的单独文件描述符。
In order to use stdin, you'd need to fetch the file, say to /tmp, then
bash /tmp/gitconfig.bash
. The way you're doing it now, you're redirecting stdin, and Unix doesn't have a separate file descriptor for command input like VMS does.