[英]Commands not working inside shell script but working directly on the console
所以我有这个我想在脚本中运行的命令:
pm2 restart my-application --update-env
我的脚本:
#!/bin/bash
sudo -u deploy bash << EOF
cd /home/deploy/my-agent
pm2 start ecosystem.json
EOF
echo "out of the deploy user"
echo "export edgeboxId=$edgeboxId">> /etc/bash.bashrc
sudo -u edgebox bash << EOF
pm2 restart my-application --update-env
EOF
echo "out of application user"
sleep infinity
此命令pm2 restart my-application --update-env
在脚本中没有按预期工作(它应该更新 pm2 的 env,但它会在不更新 env 的情况下重新启动应用程序)。 它也不会抛出任何错误。 该命令的output为:
但是当我直接在控制台上运行这个命令时,它会按预期工作。 所以我的问题是,如何使这个命令在脚本内部工作? 它看起来像一些 shell 问题,但我无法弄清楚。
注意:此命令和脚本在 docker 容器内运行,docker 容器内的5.0.3(1)-release
是/bin/bash
,版本是 5.03。
您可以启动pm2
,因为它的位置是$PATH
变量的一部分。 该$PATH
变量取决于用户。
因此,当您执行sudo
时,您会切换到另一个用户,这意味着另一个$PATH
变量,因此pm2
的位置可能不存在。
为了解决这个问题,在命令提示符下切换到该用户并调整$PATH
环境变量(以持久的方式)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.