微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何读取脚本input到shell的用户input?

如果我做了以下

#!/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] 举报,一经查实,本站将立刻删除。

相关推荐