将版本管理的 Node 作为远程 SSH 脚本运行的问题

exe*_*ook 5 linux ssh node.js nvm

我的问题是关于nvm但它可能与其他 Node 版本管理,如nnvs

您可能已经知道可以像这样使用 SSH 运行远程程序:

ssh user@server COMMAND
Run Code Online (Sandbox Code Playgroud)

例如,命令可以是 Node.js 脚本:

ssh user@devserver 'node ~/getstats'
Run Code Online (Sandbox Code Playgroud)

问题是它不适用于使用nvm. 为什么?因为node实际上是类似/home/user/.nvm/versions/node/v12.1.0/bin/node. 别名安装在~/.bashrc其中,当您使用 SSH 登录时运行。但是当您使用ssh SERVER COMMAND环境脚本执行远程命令时,脚本不会运行,因为 shell 在受限模式下运行。

一种解决方法是创建~/node哪些包含/home/monitor/.nvm/versions/node/v12.1.0/bin/node *和可执行文件,然后您可以执行ssh SERVER './node SCRIPT'. 但这并不完美,因为一旦你升级 Node,路径就会改变,你也需要更新这个文件。

解决将版本托管节点作为远程 SSH 脚本运行的问题的推荐方法是什么?

小智 12

尝试这个:

ssh user@devserver '. ~/.nvm/nvm.sh && node ~/getstats'
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下,.bashrc在 Ubuntu 18.04 中具有以下内容:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Run Code Online (Sandbox Code Playgroud)