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
我的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