Origem .bash_rc ao executar su no script

0

Estou escrevendo um script que deveria ser executado com permissões sudo. Mas então eu preciso executar um comando de um outro usuário que está obtendo .bash_rc onde há algumas variáveis de env sobrecarregadas e então usá-las em um comando.

Por exemplo. Preciso imprimir a variável PATH para o usuário:

sudo -s -u ${USER_NAME} source ~/.bash_rc; echo $PATH

Mas, em vez disso, imprime PATH para um usuário que está executando o script. Eu também tentei muitas outras opções (com su ou passando um rcfile), mas nenhuma delas parece funcionar.

Como eu poderia lidar com isso?

    
por Mehdzor 03.06.2017 / 14:00

2 respostas

1

Você tem um comando sudo que origina um script. Você também tem um comando que imprime $PATH . Os dois não são relacionados.

Talvez você quisesse dizer isso:

sudo -u "${USER_NAME}" bash -c 'source ~/.bash_rc; echo $PATH'

O -s não pode ser usado com um comando composto, mas pode ser usado com um script contendo os dois (ou mais) comandos:

cat >/opt/bin/show_me_the_path <<'X'
#!/bin/bash
source ~/.bash_rc
echo $PATH
X
chmod a+x /opt/bin/show_me_the_path

sudo -u "${USER_NAME}" -s /opt/bin/show_me_the_path

Mas mesmo isso não faz muito sentido porque o script exige seu próprio shell ( /bin/bash ). No geral, provavelmente é melhor repensar o sinal -s .

    
por 03.06.2017 / 23:45
0

Você pode executá-lo como:

sudo su - ${USER_NAME} -c 'source ~/.bash_rc; echo $PATH'

Um exemplo disso está sendo executado. O usuário "zippy" tem um arquivo ~ / .bash_rc. Observe que isso é um acréscimo ao arquivo ~ / .bashrc padrão. O usuário que está executando o comando "bschuck" não. O arquivo ~ zippy / .bash_rc contém:

#!/bin/bash
# .bash_rc
PATH=$PATH:/this/is/a/dummy/path

A execução deste comando funciona:

bschuck@valhalla:~$ sudo su - zippy -c 'source ~/.bash_rc; echo $PATH'
/home/zippy/bin:/home/zippy/.local/bin:\
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin:\
/this/is/a/dummy/path

No entanto, este comando não mantém o novo PATH originado no arquivo ~ zippy / .bash_rc:

bschuck@valhalla:~$ sudo -i -u zippy bash -c 'source ~/.bash_rc; echo $PATH'
/home/zippy/bin:/home/zippy/.local/bin:/usr/local/sbin:\
/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:\
/snap/bin

Se você precisar executar vários comandos, é melhor colocá-los em um script, como sugeri ontem em um comentário à minha resposta.

    
por 03.06.2017 / 23:42