为什么某些heredocs之前有bash关键字?

为什么某些heredocs之前有bash关键字?

在一些此处文档中,您会在开头符 (<<)、名称和文件描述符之前看到关键字 bash。例如:

bash /dev/fd/10 10<<'SES'

为什么 Bash 在那里?我的意思是,我们已经在 Bash 中工作,它不像cat用于显示文本然后将其重定向到另一个文件那样,因此cat << EOT >> /file.txt我作为一名新生问,为什么我们需要关键字 bash 。

答案1

bash没有关键字,它是正在执行的命令。正在传递参数/dev/fd/10。运行脚本的 shell(可能是也可能不是 bash)正在设置一个从文件描述符 10 读取的定界符。

因此,将调用 bash 将定界文档作为 shell 脚本运行。这与读取该行类似bash /path/to/script.sh- 在这种情况下,脚本只是来自定界文档。

为什么有人这样做了(而不是仅仅使用,如果没有上下文(也可能还有历史记录)就不可能回答。一个猜测(正如 DopeGhoti 所建议的那样)是该脚本可能在不同的 shell 下运行,而这需要 bash。另一个猜测可能性是脚本的作者只是不知道替代方法。( commands )

至于为什么使用 FD 10 而不是 stdin,可能是因为脚本块也需要从 stdin 读取。

相关内容