linux 中使用 su 的变量行为
Behavior of variables using su in linux
我正在将 Poetry 安装在 dockerfile 中,但我想在不同的用户下进行(以便与 VSCode 很好地配合)。不过,我不明白 su
命令的行为。
当我 运行 su vscode -c "echo $HOME"
我得到 /root
。但是,当我 运行 su vscode
,随后 运行 echo $HOME
,我得到 /home/vscode`。
更奇怪的是,当我 运行 su vscode -c "echo $HOME && curl -sSL https://install.python-poetry.org | python3"
时,我得到 /root
作为第一个命令的输出,但诗歌被安装到 /home/vscode/.local/bin
。我在这里不知所措...有人可以对此有所启发吗?
"echo $HOME"
由您当前的 shell 在 su
执行之前评估。所以 su
只会作为参数 "echo /root"
(already-evaluated) 传递。如果您希望变量由 su 生成的 shell 求值,则需要对其进行转义:'echo $HOME'
参见 POSIX 规范中的 2.2 Quoting
我正在将 Poetry 安装在 dockerfile 中,但我想在不同的用户下进行(以便与 VSCode 很好地配合)。不过,我不明白 su
命令的行为。
当我 运行 su vscode -c "echo $HOME"
我得到 /root
。但是,当我 运行 su vscode
,随后 运行 echo $HOME
,我得到 /home/vscode`。
更奇怪的是,当我 运行 su vscode -c "echo $HOME && curl -sSL https://install.python-poetry.org | python3"
时,我得到 /root
作为第一个命令的输出,但诗歌被安装到 /home/vscode/.local/bin
。我在这里不知所措...有人可以对此有所启发吗?
"echo $HOME"
由您当前的 shell 在 su
执行之前评估。所以 su
只会作为参数 "echo /root"
(already-evaluated) 传递。如果您希望变量由 su 生成的 shell 求值,则需要对其进行转义:'echo $HOME'
参见 POSIX 规范中的 2.2 Quoting