Runuser 不是 Return 预期结果

Runuser Not Return Expected Results

我的linux电脑上有两个账号,appuser和root。出于测试目的,我将以下代码写入 /home/appuser/.profile

export key=value

然后以 root 身份分别执行以下命令:

1. runuser -l appuser -c "echo key=$key"

   expected: key=value
   result:    key=   

2. runuser -l appuser -c "/home/appuser/test.sh"

    test.py includes only two lines:

    #!/bin/bash
    echo "key=$key"

    expected: key=value
    result:    key=value

为什么第一个命令return不能得到正确的结果??那是因为 .profile 不是在执行期间获取的吗?为什么?

你做的第一件事,没有打电话给“bash”......并且没有读取用户配置文件。

当你 运行 bash shell 脚本时,第一行启动“bash”......和来自 man “bash “:

”当 bash 作为交互式登录 shell 或作为非交互式 shell 使用 --login 选项调用时,它首先从文件 /etc/profile,如果 该文件存在。读取该文件后,它会依次查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个文件开始读取和执行命令 存在且可读。"

runuser -l appuser -c "echo key=$key"

因为它在双引号中,$key 是在当前 shell 的上下文中计算的,而不是您正在启动的 shell。它未在您的 shell 中设置,因此 运行 的命令实际上是:

runuser -l appuser -c 'echo key='

该变量甚至从未进入 runuser 命令。

使用单引号或转义美元符号以防止插值。

runuser -l appuser -c 'echo key=$key'
runuser -l appuser -c "echo key=$key"

进一步阅读:

  • Difference between single and double quotes in Bash