Linux
如何將環境變數傳遞給 sudo su
我基本上需要這樣做:
DUMMY=dummy sudo su - ec2-user -c 'echo $DUMMY'
這行不通。如何將環境變數 $DUMMY 傳遞給 su?-p 不適用於 -l。
您可以在不呼叫登錄 shell 的情況下執行此操作:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
或者:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-p
命令選項su
保留環境變數。
專業提示:從來沒有真正好的理由去跑步
sudo su
。要以其他使用者身份執行命令,請使用sudo -u username command
. 如果你想要一個 root shell,執行sudo -i
或sudo -l
. 如果你已經啟動了root賬戶,你也可以su
單獨執行,但sudo su
只是沒有用。是的,我知道你到處都能看到它。也就是說,
sudo
具有-E
將保留使用者會話環境的開關:-E, --preserve-env Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.
因此,您首先需要導出變數,然後執行
sudo -E
:$ export DUMMY=dummy $ sudo -Eu bob bash -c 'echo $DUMMY' dummy
bash -c
不需要。但是,如果我執行sudo -Eu bob echo "$DUMMY"
,該變數會在根 shell 啟動之前展開,因此它不能證明該命令確實有效:$ sudo -u bob echo $DUMMY ## looks like it works but doesn't dummy $ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed D: $ sudo -Eu bob bash -c 'echo D:$DUMMY' ## works as expected D:dummy