linux - 从 runuser 命令传播退出代码

标签 linux bash user-permissions

我想以特定用户身份运行 bash 脚本 StartSomething.sh。为此,我使用了 runuser 命令。我也想知道这个 bash 脚本的退出代码。因此,当命令完成或中断时,我将退出代码写入文件。这是代码:

runuser myuser -s /bin/bash -c "./StartSomething.sh --pidfile=${pidfile}; \
                                echo $? > ${statusfile};" &
sleep 5
pid=$(cat ${pidfile})

while ps -p ${pid} > /dev/null; do sleep 1; done
end=$(cat ${statusfile})
echo "End code: ${end}"
exit ${end}

问题是退出代码仍然是 0,尽管 bash 脚本被中断了。有什么问题吗?

如果我有单独的文件 start.sh,代码如下:

./StartSomething.sh --pidfile=${pidfile} echo $? > ${statusfile}

和 runuser 命令如下所示:

runuser myuser -s/bin/bash -c "./start.sh"&

一切正常。我想使用没有单独文件的第一个示例。有人可以告诉我什么是错的吗?这个问题有更好的解决方案吗?

最佳答案

如果你只想在后台运行程序,然后等待它完成,我想你也可以使用 wait 来获取返回值 (runuser 传递它,除非发生异常情况):

runuser myuser ./StartSomething.sh --pidfile=${pidfile} &
pid=$!
# do something else
wait $!
echo "it returned $?"

runuser myuser ./StartSomething.sh --pidfile=${pidfile} &
pid=$!
echo -n "waiting"
while kill -0 $pid 2>/dev/null; do
    echo -n "." 
    sleep 1
done
echo
wait $!
echo "it returned $?"

关于linux - 从 runuser 命令传播退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43995368/

相关文章:

linux - redhat 4.1安装zeromq报错

linux - 在现有条目下创建 proc 条目

bash - 如何使用sed计算文件中非空行的数量?

Bash Completion : What can we do with it, future 会发生什么

java - Spring OAuth2 checkUserScopes 未按预期工作

linux - Linux脚本和Ififif else语句

python - 是否可以使用来自非登录 shell 的单行命令从 bash 登录 shell 执行 python 脚本?

bash - 在 make clean 上使用通配符时如何修复 Makefile 语法错误?

database-design - 数据库设计: RBAC or ABAC?

django - 用于服务媒体的用户权限 Django