我在这里看这个例子:
https://bbs.archlinux.org/viewtopic.php?id=168479
它说我可以这样执行JS / Node.js:
#!/bin/sh
exec node --harmony <<EOF
console.log("hello")
EOF
这对任何人都有意义吗?到底发生了什么?
在一些谷歌搜索看起来像这样将EOF字符之间的数据拉入stdin。
如果这是可能的话,它将允许我解决一个特定的问题 - 即使用用户$ PATH上的任何节点可执行文件,同时仍然传递节点可执行标志(在这个例子中,它是&#39;#34; --harmony&#34;。)
如果查看链接,只需要稍微查看上面的代码即可。
任何人都可以解释这个EOF语法的含义吗?
我遇到的一个具体问题是我无法运行此代码:
我的猜测是我们将stdin传递给Node.js可执行文件,并且由于某种原因它无法正确解析路径 -
即使cli.js与cli-inspect.sh位于同一目录中,但require函数不起作用。在第一行中,我们看到__dirname是&#34;。&#34;,通常情况并非如此。
答案 0 :(得分:1)
如您对问题的评论所述,它是heredoc。它会从<<EOF
到EOF
的第一个实例选择所有文本。您可以使用其他标记名称,而不仅仅是 EOF 。
它允许您定义包含换行符的文本块。
语法具有与
相同的效果echo 'console.log("hello")' | exec node --harmony
因为它将heredoc的内容传递给节点。但是你可以包含很好的换行符。