在bash脚本中执行Node.js文件

时间:2016-11-23 08:35:52

标签: javascript node.js bash sh

我在这里看这个例子:

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语法的含义吗?

我遇到的一个具体问题是我无法运行此代码:

enter image description here

我的猜测是我们将stdin传递给Node.js可执行文件,并且由于某种原因它无法正确解析路径 -

enter image description here

即使cli.js与cli-inspect.sh位于同一目录中,但require函数不起作用。在第一行中,我们看到__dirname是&#34;。&#34;,通常情况并非如此。

1 个答案:

答案 0 :(得分:1)

如您对问题的评论所述,它是heredoc。它会从<<EOFEOF的第一个实例选择所有文本。您可以使用其他标记名称,而不仅仅是 EOF

它允许您定义包含换行符的文本块。

语法具有与

相同的效果
echo 'console.log("hello")' | exec node --harmony

因为它将heredoc的内容传递给节点。但是你可以包含很好的换行符。