Como root eu fiz
# WWWFOLDER=myproject
# echo $WWWFOLDER
myproject
# su - anothershelluser /bin/bash -c "echo $WWWFOLDER"
#
Como você pode ver, não tenho nada impresso.
Já tentei, sem sucesso
# su - anothershelluser /bin/bash -c "echo ${WWWFOLDER}"
# su - anothershelluser /bin/bash -c 'echo ${WWWFOLDER}'
# su - anothershelluser /bin/bash -c 'echo $WWWFOLDER'
Pergunta
Como posso passar WWWFOLDER para o comando bash a ser executado?
Passar
-
parasu
é pedir explicitamente para limpar o ambiente e simular um login.Basta soltar o
-
.Além disso, na maioria
su
das implementações, o que você passa-c
é o código para passar para o shell de login do usuário de destino, então você precisa passar o código na sintaxe desse shell. Se esse shell for do tipo Bourne:Se você precisa que um shell bash seja executado independentemente de qual seja o shell de login do usuário de destino (mas por que você faria isso), você precisa construir o código na sintaxe do shell de login do usuário de destino que o fará executar esse bash concha.
Se for do tipo Bourne, pode ser:
Usar
sudo
em vez desu
tornaria mais fácil:(
-E
para preservar o meio ambiente; observe quesudo
não necessariamente preservará todo o meio ambiente).O shell zsh possui suporte integrado para alterar uid/gids atribuindo às variáveis UID, EUID, GID, EGID ou USERNAME. Aí seria só:
(o que também pularia todas as coisas extras que o su/sudo faz, como invocar a pilha pam, registrar, adicionar empacotamento pty extra etc.).