Use o seguinte script ~/test.sh
como exemplo:
#!/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
Eu então executo assim:
User@MACHINE:~$ sudo bash test.sh
User@MACHINE:~$ echo $HELLO
Eu esperava que Hello StackExchange
fosse impresso no terminal, mas uma linha em branco foi impressa.
Se eu entendi o que está acontecendo corretamente, o comando source ~/.profile
não está sendo aplicado ao meu shell atual. Então, como posso criar alterações feitas em arquivos como .profile
no shell em execução a partir de um script sem ter que sair e fazer login novamente? Isso é possível?
P.S: Suponha que test.sh
seja sempre executado com sudo
e nunca sem ele. O script acima é apenas um exemplo, mas eu uso sudo -u ${SUDO_USER} command
quando eu preciso de certos comandos para executar como o usuário que invocou o script e não como root
.
Tags bash shell profile shell-script