Bash脚本的行为与在远程服务器中手动执行命令时不同
我有一个远程服务器,我可以Bash脚本的行为与在远程服务器中手动执行命令时不同,bash,npm,Bash,Npm,我有一个远程服务器,我可以ssh进入其中,当我执行npm安装时,它工作得很好。我可以通过调用哪个npm看到它已安装,我看到: /home/ubuntu/.nvm/versions/node/v15.11.0/bin/npm 太好了 但是,当我通过bash脚本执行此操作时,它会说 bash:line 1:npm:command未找到 我的剧本: #!/bin/bash ssh he-int 'npm install' 为什么两者之间存在差异?这是相同的命令…听起来好像npm是在一个登录脚本(.
ssh
进入其中,当我执行npm安装时,它工作得很好。我可以通过调用哪个npm
看到它已安装,我看到:
/home/ubuntu/.nvm/versions/node/v15.11.0/bin/npm
太好了
但是,当我通过bash脚本执行此操作时,它会说
bash:line 1:npm:command未找到
我的剧本:
#!/bin/bash
ssh he-int 'npm install'
为什么两者之间存在差异?这是相同的命令…听起来好像npm是在一个登录脚本(.bashrc、.profile等)中添加到您的路径中的。我特别认为这是正确的,因为npm
路径表明您正在使用它来管理您的npm环境。可能会调用nvm
,将npm添加到其中一个登录脚本的路径中
当您像第二个命令一样运行ssh命令时,它不会作为登录shell运行,因此它不会运行登录脚本。您可以:
尝试并强制它作为登录shell运行(ssh-t
maybe?不确定)
尝试在脚本中初始化npm环境,可能是通过调用nvm
npm
在使用bash脚本时,可能不在您要登录的用户的路径中
使用此选项查看PATH变量中的内容:
ssh-he-int'echo$PATH'
您也可以直接尝试使用路径,看看它是否有效
#/bin/bash
ssh he int'/home/ubuntu/.nvm/versions/node/v15.11.0/bin/npm install'
\u我可以通过调用哪个npm看到它已安装。\u您可以在远程端看到这一点吗?i、 e.ssh he int哪个npm