![为什么某些heredocs之前有bash关键字?](https://linux22.com/image/108148/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9F%90%E4%BA%9Bheredocs%E4%B9%8B%E5%89%8D%E6%9C%89bash%E5%85%B3%E9%94%AE%E5%AD%97%EF%BC%9F.png)
在一些此处文档中,您会在开头符 (<<)、名称和文件描述符之前看到关键字 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 读取。