su - usuário -c env não obtendo variável ambiental sem -l adicionado

0

Estou tendo um problema no momento em que não entendo o que está acontecendo, já que sou muito novo no Linux.

Existe um script que estou tentando executar (que não postarei como não tenho permissão) que precisa ser executado como usuário root, mas quando eu o executo, ele diz que ele não tem a variável de ambiente necessária e precisa ser definido. Mas o script deve fazer isso.

Nós instalamos em duas caixas, uma funciona bem e a outra não. Quando nós executamos este comando na caixa de trabalho: su - user -l -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
Retorna o caminho correto.

Se eu correr na outra caixa, não traz nada. No entanto, se eu alternar o -l e -l em volta, ele retornará o caminho correto.

Alguém pode me apontar na direção certa sobre o que está errado aqui? Eu não tenho permissão para apenas atualizar tudo na caixa para ver se isso corrige o problema, infelizmente. Mas se eu puder reduzir isso ajudaria muito, já que no momento não tenho nenhuma pista. Se você precisar de mais informações, então espero que eu possa fornecer (Embora isso possa ter que ser na próxima semana).

Nota: No script real, o -l não está lá:
if ["$ eu"="raiz"]; então,
        ENVVARIABLE = 'su - $ user -c env 2 > / dev / null | grep 'ENVVARIABLE =' | awk -F = '{print $ 2}'
fi

Editar 1: O mesmo shell (bash) é usado para os usuários nas duas caixas

    
por DanMog 29.03.2018 / 12:21

1 resposta

0

Advertência: o su no Linux pode não ser o mesmo em todos os sistemas. Como de costume, man su deve fornecer respostas sobre as suas opções e versões.

Condições para obter um ambiente propagado:

  1. A variável é exportada por meio do comando export ENVVARIABLE
  2. su é dito para manter o ambiente, que aqui (Debian 9) pode ser feito com as opções -m, -p, --preserve-environment.

Então, isso funciona aqui:

su -m - user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
    
por 29.03.2018 / 16:30