如果我做了以下
#!/bin/bash echo aaa read -i aaa echo bbb echo $aaa
并通过cat test.sh | bash启动它 cat test.sh | bash然后我得到
aaa
而不被要求input。
题
如何获得“tail -f”的“即时”输出作为input?
sed在Linux和FreeBSD上
Bash脚本和C ++之间的持久IPC
通过url匹配域名(www.google.com = google)
脚本必须由cat test.sh | bash启动 cat test.sh | bash模拟wget -qO - url | bash wget -qO - url | bash ,我怎么能要求用户键入input?
如何知道连接拒绝扔curl
bash for循环中迭代次序是否有保证?
打破shell脚本; 引擎盖下发生了什么?
检查进程是否正在运行
The script have to be started by cat test.sh | bash,
这是为什么? cat会在stdout上打印你的脚本而不是执行它。
只要执行你的脚本:
bash ./test.sh
更新:根据您的评论:
这也应该工作:
bash <(cat "test.sh")
内置读取从stdin读取,在你的场景中,stdin是来自cat的重定向输出。 当你打电话的时候,它只是想从猫那里读更多的东西,而不是键盘。
尝试以下选项之一阅读:
-e readline is used to obtain the line. or -u FD Read input from file descriptor FD.
在第二种情况下,我不知道FD的一个合理的值可能是什么(在/ dev /?键盘或tty设备)
我甚至不确定你可以使用这个阅读。
通过运行cat test.sh | bash cat test.sh | bash ,你用一个管道文件描述符来替换bash进程的stdin(通常是终端,即“键盘”),这个描述符连接到一个编写test.sh内容的cat进程。
但是,当bash从管道中读取脚本执行命令时,它还会执行read -i aaa ,从stdin中读取数据,并且可以读取指向bash的命令。
这意味着我们可能在这里有未定义的行为,除非它在什么块bash读取它的命令中指定。
因此,在将脚本传输到shell时,最好不要在脚本中使用任何使用输入的命令。
为什么最后的echo $aaa显然只能打印一个换行符,而不是读取什么? 因为你不是故意要说read -i aaa ,而只是read aaa 。
无论如何,从stdin中读取一个shell脚本是不常见的。 只需执行bash test.sh或使用shebang行 。
使用:
read -i aaa < /dev/tty
从终端读取,而不是shell的标准输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。