Como alternar / alterar a identificação do usuário em um script bash para executar comandos no mesmo script?

12

Existe uma maneira de alternar a identidade do usuário em um script (executado como raiz como parte de um processo de instalação) para executar alguns comandos sem chamar um script externo e retornar rootpara executar outros comandos?

Tipo de:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...
a1an
fonte
Você deve dar uma olhada nesta resposta stackoverflow.com/a/17758312/1243547
Klaus

Respostas:

27

Não. Mas você pode usar sudopara executar um shell e usar um heredoc para alimentar os comandos.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami
Ignacio Vazquez-Abrams
fonte
Isso certamente faz o trabalho em manter as coisas juntos no mesmo script e também pode usar substituição de comando se tudo é envolvido com o fechamento suporte de uma linha após EOF
a1an
Essa resposta é melhor do que todas as respostas da pergunta que esta duplica .
Dan Dascalescu
1
Eu quase me pergunto, se eu fizesse isso, não usaria EOF e, em vez disso, alterei o nome do heredoc para SUDO. Dessa forma, eu lembraria que estou executando como superusuário dentro do código que o contém.
9136 Joe Heyming
Por alguma razão, parece que, ao definir vars no comando heredoc, os vars não estão definidos. Se eu tentar BLA="something"e, em seguida, por exemplo: echo "In: $BLA", parece BLA está vazia
Efren