提问人:samb 提问时间:12/13/2017 更新时间:1/15/2022 访问量:8665
如何通过 ssh 运行 npm
How to run npm through ssh
问:
按照 https://nodesource.com/blog/installing-node-js-tutorial-using-nvm-on-mac-os-x-and-ubuntu/ 安装 npm 后,在末尾增加了 3 行来加载 nvm 工具。~/.bashrc
使用 ssh 连接到该服务器时,输出按预期。npm --version
5.5.1
但是当远程运行时:
ssh server /bin/bash -l -c "npm --version"
我得到:
--version: npm: 找不到命令
在一行中远程运行时,使 npm 可用的正确方法是什么?
答:
正如您可能怀疑的那样,问题在于您的采购没有。通过添加标志,您的想法是正确的,但在这种情况下,您真正需要的是生成交互式 shell 的标志,从而在命令执行之前获取您的信息。.bashrc
-l
-i
.bashrc
ssh -t "server" 'bash -i -c "npm --version"'
man ssh
如果指定,则在远程主机上执行,而不是在登录 shell 上执行。
command
-t
强制伪终端分配。
男人 Bash
当启动不是登录 shell 的交互式 shell 时,bash 会从 和 读取并执行命令(如果这些文件存在)。
/etc/bash.bashrc
~/.bashrc
评论
-t
ssh
我在 /etc/profile.d 中有我的 nvm.sh 文件,其中包含以下内容:
export NVM_DIR = "/ usr / local / nvm"
[-s "$ NVM_DIR / nvm.sh"] && \. "$ NVM_DIR / nvm.sh" # This loads nvm
[-s "$ NVM_DIR / bash_completion"] && \. "$ NVM_DIR / bash_completion" # This loads nvm bash_completion
因此,要通过ssh从另一台服务器进行连接,我可以通过增加之前来完成,即:. /etc/profile.d/nvm.sh
ssh -t "server" ". /etc/profile.d/nvm.sh && npm -v"
请参考这个问题:https://apple.stackexchange.com/questions/12993/why-doesn't-bashrc-run-automatically
它既有解决方案,也有对问题根本原因的解释。通常,您不必在级别上指定任何内容 - shell 初始化应该是自动的,并且应该打开交互式 shell。ssh
ssh
评论