作为根我做了
# WWWFOLDER=myproject
# echo $WWWFOLDER
myproject
# su - anothershelluser /bin/bash -c "echo $WWWFOLDER"
#
如您所见,我没有打印任何内容。
我已经尝试过,没有成功
# su - anothershelluser /bin/bash -c "echo ${WWWFOLDER}"
# su - anothershelluser /bin/bash -c 'echo ${WWWFOLDER}'
# su - anothershelluser /bin/bash -c 'echo $WWWFOLDER'
问题
如何将 WWWFOLDER 传递给要执行的 bash 命令?
传递
-
给su
是明确要求它擦除环境并模拟登录。只需放下
-
.此外,在大多数
su
实现中,您传递-c
给目标用户的登录 shell 的代码,因此您需要以该 shell 的语法将代码传递给它。如果那个 shell 是 Bourne-like:如果无论目标用户的登录 shell 是什么都需要执行 bash shell(但为什么要这样做),则需要按照目标用户的登录 shell 的语法构造代码,使其运行该 bash壳。
如果它是 Bourne-like,那可能是:
使用
sudo
而不是su
会使它更容易:(
-E
保护环境;注意,sudo
不一定会保护所有的环境)。zsh shell 内置支持通过分配给 UID、EUID、GID、EGID 或 USERNAME 变量来更改 uid/gids。在那里,这只是一个问题:
(这也会跳过 su/sudo 执行的所有额外操作,例如调用 pam 堆栈、日志记录、添加额外的 pty 包装等)。