node.js - 令我害怕的 sh 线,它便携吗?

标签 node.js bash sh pm2

我目前正在处理pm2 ,NodeJS 的流程管理器。

由于它是针对 Javascript 的,因此一个新标准即将到来,ES6。 要在 NodeJS 上启用它,我必须添加选项 --harmony

现在对于 bash 部分,我必须让用户将此选项传递给执行该文件的解释器。通过爬行网络(并在 Stackoverflow 上找到)我发现了这个:

#!/bin/sh

':' //; exec "`command -v nodejs || command -v node`" $PM2_NODE_OPTIONS "$0" "$@"

bin line

看起来是一个不错的技巧,但是它是否足够便携?在 CentOS、FreeBSD 上...

这很关键,所以我想确定一下。

谢谢

最佳答案

让我们分解一下兴趣线。

: 在 shell 中不执行任何操作。

; 是命令分隔符。

exec 将用它正在执行的命令的进程替换当前进程。

请注意,在 exec 命令中,它将 "$0""$@" 作为参数传递给命令?

这将允许新进程读取由 $0 表示的脚本并将其用作脚本输入并读取原始参数 $@

新进程将从头开始读取输入脚本并忽略诸如#!/bin/sh之类的注释。并且还会忽略 :

这就是窍门。大多数解释器(包括 perl)使用 shell 忽略的语法,反之亦然,因此在重新读取输入文件时,解释器不会再次执行自身。

在这种情况下,新进程忽略了 : 中的整行。为什么该行的其余部分被忽略?在某些 C 语言(如解释器)上,// 是注释。

我忘了回答你的问题了。是的,它看起来很便携。可能存在极端情况,但我现在想不到。

关于node.js - 令我害怕的 sh 线,它便携吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21126385/

相关文章:

linux - Bash:消除冗余路径组件?

node.js - Knex事务查询和Postgres外键约束

node.js - 带有nodejs的Requirejs不告诉我错误的行号,只是错误

Node.JS 不为 IIS 上的端口 80 提供服务

javascript - 如何使用node.js和express读取post请求负载?

bash - 将来自 postgresql 的值存储在 bash 变量中

bash - 如何逐行执行 bash 脚本?

bash - 用 tr 去除反斜杠

bash - 带参数的shell脚本?

bash - 在 shell 脚本中匹配所有带有井号(#)的单词