Altere user AND environment no script bash

0

Por que isso funciona (como root):

$su - aba
~> echo $JAVA_HOME

Ausgabe: /usr/java/jdk1.7.0_45

E não este script de shell (também executado como root):

#!/bin/bash
su - aba << EOF
echo $JAVA_HOME > tmp
EOF

Saída:

$more tmp

$

Pergunta: Como posso fazer isso funcionar? Ou melhor: meu objetivo é executar alguns comandos como outro usuário e também usar esse ambiente desse usuário e talvez até mudar seu ambiente (apenas temporário).

EDITAR Entretanto, eu consegui com runuser - aba -c 'echo JAVA_HOME' , embora não seja em todos os aspectos o que desejava, porque ainda posso transferir apenas uma linha de comando.

    
por Nils-o-mat 14.04.2014 / 11:14

1 resposta

1

su - aba

é curto para

su --login ada

que não faz sentido dentro de um script. Como você não tem um terminal quando é executado, ele volta ao usuário anterior (root).

tente

su -c "echo $JAVA_HOME" ada

mas mesmo isso não vai rodar os usuários .profile ou .bashrc.

No entanto, você é root e deve poder analisar esses arquivos para as configurações adequadas.

por exemplo,

TEMP_JAVA=$(grep JAVA_HOME /home/$USER/.bashrc)
JAVA_HOME=${TEMP_JAVA##*=} echo $JAVA_HOME

    
por 14.04.2014 / 15:28

Tags