【问题标题】:Running a script to connect through ssh then run npm install pm2 results in: 'npm: command not found'运行脚本以通过 ssh 进行连接,然后运行 ​​npm install pm2 结果:'npm: command not found'
【发布时间】:2024-01-06 01:57:01
【问题描述】:

我在本地机器上运行这个命令:

ssh -tt -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com "sudo su -c 'cd /dir/;npm install pm2'"

它连接,以超级用户身份运行,cds 到 dir 并尝试运行命令,但返回 npm 不是系统识别的命令。

但是,当我“手动”连接时,即

ssh -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com
sudo su
cd /dir
npm install pm2

它有效。

npm安装在root下,系统可以看到。

ssh -tt -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com "sudo su -c 'cd /dir/;whoami'"

ssh -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com
sudo su
cd /dir
whoami

都返回“root”

为什么在 ssh 上运行时找不到 npm 命令?

【问题讨论】:

标签: linux amazon-ec2 ssh sh


【解决方案1】:

当您登录时,您会创建一个交互式 shell,它通常会读取几个文件,包括 /etc/profile$HOME/.profile$HOME/.bashrc(在 的情况下)。

这些文件中的任何一个都可以向PATH 变量添加额外的元素(路径),这会影响可以找到哪些命令。

当你直接运行命令行时,不会进行这样的初始化,$PATH 的值可能仅限于/bin:/usr/bin

接下来是sudo,在查找命令时可能会也可能不会导入PATH的值。

解决方案

你能做的最好的就是找出npm 的安装位置,并使用它的完整路径。

【讨论】:

    最近更新 更多