I'm installing Poetry in a dockerfile, but I want to do it under a different user (to play nicely with VSCode). I don't understand the behavior of the su command though.
When I run su vscode -c "echo $HOME" I get /root. However, when I run su vscode, and subsequently run echo $HOME, I get /home/vscode`.
Even stranger, when I run su vscode -c "echo $HOME && curl -sSL https://install.python-poetry.org | python3", I get /root as output of the first command, but poetry is installed to /home/vscode/.local/bin. I'm at a loss here... can someone shine some light on this?
"echo $HOME"is evaluated by your current shell beforesuis executed. Sosuwill only be passed as argument"echo /root"(already-evaluated). If you want the variable to be evaluated by the shell spawned by su, you need to escape it:'echo $HOME'See 2.2 Quoting in the POSIX specification