以下面的~/test.sh
脚本为例:
#!/bin/bash
sudo -u ${SUDO_USER} cp ~/.profile ~/.profile.bak
cat <<EOF >>/home/${SUDO_USER}/.profile
export HELLO="Hello StackExchange"
EOF
sudo -u ${SUDO_USER} source ~/.profile
sudo -u ${SUDO_USER} cp ~/.profile.bak ~/.profile
sudo -u ${SUDO_USER} rm ~/.profile.bak
然后我像这样运行它:
User@MACHINE:~$ sudo bash test.sh
User@MACHINE:~$ echo $HELLO
我原本期望Hello StackExchange
在终端上打印,但打印了一个空行。
如果我正确理解发生了什么,则该source ~/.profile
命令不会应用于我当前的 shell。那么,我如何能够.profile
从脚本中获取对文件(例如当前正在运行的 shell)所做的更改,而无需注销并重新登录?这可能吗?
PS:假设test.sh
总是在有它的情况下运行sudo
,并且从不没有它。上面的脚本只是一个示例,但当sudo -u ${SUDO_USER} command
我需要以调用脚本的用户身份运行某些命令而不是root
.