2016-04-21 38 views
0

时,我有这通常起始于Node.js的可执行脚本:条件语句初始化脚本的Node.js

#!/usr/bin/env node 

var ... 

为了使用命令行参数--use_strict对Node.js的二进制文件,我需要将其更改为

#!/usr/bin/env node --use_strict 

这可能会让其他人感到困扰。

有没有办法在调用脚本时检查是否提供了--use_strict,然后将它传递给可执行节点?

./myscript --use_strict 
--- 
if --use_strict 
    #!/usr/bin/env node --use_strict 
else 
    #!/usr/bin/env node 
+1

这些不是bash脚本。他们是'节点'脚本。而且你实际上不能保证'#!/ usr/bin/env节点--use-strict'甚至可以工作。 (不支持多个参数的支持。)是不是可以在脚本中设置'--use-strict'? –

+1

'#!'必须是脚本的前两个字符,不能将它们放在其他任何地方,而不要将它们仅仅作为注释。为什么不从一个bash脚本那样做if语句?您可以像从命令行一样运行'node'脚本。 – cdarke

+0

@EtanReisner的权利。不,我不能在脚本中设置它,它是一个公共npm模块。我现在看到的唯一解决方案是分解它。 – Patrick

回答

0

#!/usr/bin/env node将指示操作系统上的文件#!(“认领”)后调用命令。如果你的脚本文件your-node-script中,操作系统基本上运行此:

/usr/bin/env node your-node-script 

env命令将搜索环境中的第一个参数,并与其余的参数执行它。如果您node可执行文件在/usr/bin/node,您的系统上,它会调用:

/usr/bin/node your-node-script 

解决你的问题,你只写一个包装脚本,做同样打电话给你的节点脚本:

#!/bin/bash 
/usr/bin/env node --use-strict your-node-script "[email protected]" 

或:

#!/bin/bash 
/usr/bin/node --use-strict your-node-script "[email protected]" 

(仅适用于系统中node acrually是/usr/bin


编辑:参数现在转发(感谢伊坦赖斯纳)。

+0

这里的包装器脚本不会将参数转发给节点脚本。 (这可能也可能不重要,但是为了通用性,应该包含在包装脚本中。) –