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