次の~/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
コマンドは現在のシェルには適用されません。では.profile
、ログアウトして再度ログインしなくても、スクリプト内のファイル(現在実行中のシェル)に対する変更をどのように取得できますか?可能ですか?
PS:test.sh
常にそれと一緒に実行されsudo
、それなしでは実行されないとします。上記のスクリプトは単なる例ですsudo -u ${SUDO_USER} command
がroot
。