다음 ~/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
로그아웃했다가 다시 로그인하지 않고도 스크립트에서 파일(예: 현재 실행 중인 셸)에 대한 변경 사항을 어떻게 얻을 수 있습니까? 가능합니까?
추신: test.sh
항상 그것과 함께 실행 sudo
되고 그것 없이는 실행되지 않는다고 가정하십시오. 위의 스크립트는 단지 예일 뿐이지 sudo -u ${SUDO_USER} command
만 root
.