2016-11-23 204 views
0

我一直在寻找这个例子在这里:执行Node.js的文件中bash脚本

https://bbs.archlinux.org/viewtopic.php?id=168479

它说我可以执行JS/Node.js的是这样的:

#!/bin/sh 
exec node --harmony <<EOF 
console.log("hello") 
EOF 

不对任何人都有意义?究竟发生了什么?

一些谷歌搜索看起来像这样将EOF字符之间的数据拉到标准输入。

如果这是可能的,它将允许我解决一个特定的问题 - 即使用用户$ PATH中的任何可执行节点,同时仍然传递节点可执行标志(在本例中为“--harmony”)。

如果你看看链接,你只需要稍微查看一下上面的代码。

任何人都可以解释这个EOF语法是关于什么的?

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

enter image description here

我的猜测是,我们通过标准输入到Node.js的可执行文件,以及由于某种原因,它不能正确解析路径 -

enter image description here

即使cli.js是在同一个目录中cli-inspect.sh,需要功能无法正常工作。在第一行中,我们看到__dirname是“。”,通常情况并非如此。

+0

对你而言,我不清楚你的问题。 –

+0

这是什么“EOF EOF语法? –

+0

它是'Here Document' https://en.wikipedia.org/wiki/Here_document#Unix_shells –

回答

1

正如你的问题的评论中提到的那样,这是一个heredoc。它从<<EOF中选择所有文本到EOF的第一个实例。您可以使用其他标记名称,而不仅仅是EOF

它允许你定义一个文本块,包括换行符。

的语法具有

echo 'console.log("hello")' | exec node --harmony 

在于其管道定界符的内容到节点等同的效果。但你可以包括很好的换行符。