Exp*_*lls 68 shell shebang node.js
我正在尝试为node.js创建一个可在多个环境中工作的脚本.特别是对我来说,我在OS X和Ubuntu之间来回切换.在前者中,Node安装为node,但后者是nodejs.在我的脚本的顶部,我可以:
#!/usr/bin/env node
Run Code Online (Sandbox Code Playgroud)
要么
#!/usr/bin/env nodejs
Run Code Online (Sandbox Code Playgroud)
我宁愿让脚本作为任一环境的可执行文件运行,只要安装了节点而不是让一个或另一个必须指定命令(./script-name.jsvs. node script-name.js).
是否有任何方法可以指定备份hashbang或者在node.js的任何一种情况下都兼容?
Mar*_*ery 102
如果您的脚本供Node开发人员使用,那么您绝对应该使用
#!/usr/bin/env node
Run Code Online (Sandbox Code Playgroud)
而不是试图与只安装了Node的人兼容nodejs.
理由:
#!/usr/bin/env node用作可执行脚本的shebang./usr/bin/node一个符号链接nodejs.在Stack Overflow上以及整个网络上都有高度重视的说明.甚至有一个nodejs-legacy包,其目的是为你创建这个符号链接.使用Node的人知道如何在Ubuntu上解决这个问题,如果他们想要使用几乎任何在Node中编写的软件,他们必须这样做.apt-get install nodejs并创建/usr/bin/node了一个符号链接/etc/alternatives/node.我怀疑,受这个问题困扰的人是一个萎缩的少数民族.即使你是针对Node-illiterate的人,你可能仍然想要使用#!/usr/bin/env node,nodejs-legacy如果你认为有必要,可能会增加创建手动符号链接或将软件包安装到安装文档的可能性.请注意,如果有人nodejs但没有node可用尝试使用上述shebang运行您的程序,他们会看到:
/ usr/bin/env:node:没有这样的文件或目录
和谷歌搜索将在第一页结果和第一页上多次给他们修复.
如果你真的,拼命想要确保用户可以在nodejs可用但node不是(或node实际上是业余分组无线节点程序)的系统上运行你的软件,那么你可以使用这个"双线shebang"来自Unix和Linux Stack Exchange:
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
Run Code Online (Sandbox Code Playgroud)
但是,当Node节点中几乎没有其他人是你的时候,你真的需要这样做吗?