背景:我正在尝试通过脚本顶部的shebang,在非登录shell中使nvm
正确设置node
。
在登录shell
中,node脚本的shebang为:
#!/usr/bin/env node
这种方法对于非登录shell
无效,因此我想要做相当于以下操作的事情:
#!/usr/bin/env [[ -s $HOME/.nvm/nvm.sh ]] && source "$HOME/.nvm/nvm.sh" && node
但是我无法正确地写出语法(查看下面的错误)。我已经尝试了几种方式,包括对脚本进行引号处理或尝试运行 bash -c
。但每次都会遇到解析错误。
完整脚本如下:
#!/usr/bin/env node
const semver = require('semver');
console.log("Hello World! You're using " + process.version)
错误:
在登录 shell 中出现(我不需要它的地方)
❯ bin/nodesample.js
env: [[: No such file or directory
在非登录Shell中,我想找到一个解决方案。
env: [[: No such file or directory
如果我尝试运行
#!/usr/bin/env "[[ -s $HOME/.nvm/nvm.sh ]] && source "$HOME/.nvm/nvm.sh" && node"
env: "[[: No such file or directory
#!/whatever/node
的 shebang 就是告诉操作系统使用 node 二进制文件来运行脚本。我认为这不是你想要的。你可能仍然希望你的脚本运行 bash 命令并从 bash 运行 nvm。 - Julien B./usr/bin/env
,然后再运行 node。它不像你的例子那样直接运行 node。你能给我一个从 bash 脚本本身运行内联 node 代码的例子吗?我已经加入了我正在运行的完整脚本。作为参考,在不运行 nvm 脚本的情况下,node 路径是无法确定的。 - Preet Sangha