依赖于标准输入的命令无法正常工作

依赖于标准输入的命令无法正常工作

这是我的代码

bash << EOF
  read
  EOF

在这里,命令失败,无法从标准输入读取

和这里

bash << EOF
  read
  ls
  ls
  EOF

仅次于ls被执行(第一个ls已重定向至作为输入?

有人能告诉我我做错了什么吗?所有需要从 std 输入输入的命令都失败了

答案1

语法<<word("Here documents") 重定向标准输入。因此,您所做的就是启动一个 bash,其标准输入被重定向到“here document”。当该 bash 启动子进程(或执行内置命令)时,这些子进程会从 bash 继承标准输入,因此它们也会从 here document 读取数据。(here document 并没有什么特别神秘之处。一种实现可能性是将 here document 复制到临时文件中,然后将标准输入重定向到该文件。Bash 可能会在某些情况下这样做。)

重定向标准输入并不是让 bash 执行文件的唯一方法。您只需在命令行上为 bash 提供文件的名称即可。同样,您不需要真实的文件即可实现此功能;您可以使用进程替换,如下所示:

bash <(echo '
 read -p "Say it: " A
 echo You said $A
')

由于这不会重定向标准输入,因此read将从标准输入读取,而不是从输入到 bash 的命令读取。

但要注意引用问题:在输入这​​个简单的例子时,他们两次咬了我一口。

相关内容