运行 通过 ssh 连接的脚本然后 运行 npm install pm2 结果:'npm: command not found'
Running a script to connect through ssh then run npm install pm2 results in: 'npm: command not found'
我运行从我的本地机器上执行这个命令:
ssh -tt -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com "sudo su -c 'cd /dir/;npm install pm2'"
它连接,作为超级用户运行,cds 到目录并尝试 运行 命令,但是 returns that 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
两个return“root”
为什么在 ssh 上 运行 找不到 npm 命令?
当您登录时,您会创建一个交互式 shell,它通常会读取几个文件,在本例中包括 /etc/profile
、$HOME/.profile
和 $HOME/.bashrc
bash.
这些文件中的任何一个都可以向 PATH
变量添加额外的元素(路径),这会影响可以找到哪些命令。
当您直接运行命令行时,不会发生这样的初始化,并且$PATH
的值可能仅限于/bin:/usr/bin
。
接下来是sudo
,在查找命令时可能会也可能不会导入PATH
的值。
解决方案
您最好找出 npm
的安装位置,并使用其完整路径。
我运行从我的本地机器上执行这个命令:
ssh -tt -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com "sudo su -c 'cd /dir/;npm install pm2'"
它连接,作为超级用户运行,cds 到目录并尝试 运行 命令,但是 returns that 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
两个return“root”
为什么在 ssh 上 运行 找不到 npm 命令?
当您登录时,您会创建一个交互式 shell,它通常会读取几个文件,在本例中包括 /etc/profile
、$HOME/.profile
和 $HOME/.bashrc
bash.
这些文件中的任何一个都可以向 PATH
变量添加额外的元素(路径),这会影响可以找到哪些命令。
当您直接运行命令行时,不会发生这样的初始化,并且$PATH
的值可能仅限于/bin:/usr/bin
。
接下来是sudo
,在查找命令时可能会也可能不会导入PATH
的值。
解决方案
您最好找出 npm
的安装位置,并使用其完整路径。