是否可以从脚本在当前 shell 中获取 ~/.profile ?

是否可以从脚本在当前 shell 中获取 ~/.profile ?

以下面的~/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.

相关内容