繁体   English   中英

命令在 shell 脚本中不起作用,但直接在控制台上起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM