Como exportar variáveis env como outro usuário

0

Estou tentando definir uma variável de ambiente para uma sessão de usuário antes de executar um script:

su - myUser -c "export myVar=$toto ; sh scriptThatNeedsMyVar.sh"

Os scripts falham, tentei depurar e imprimir o valor myVar:

su - myUser -c "export myVar=$toto ; echo $myVar"

não retorna nada, isso significa que minha variável env não foi criada embora eu esteja criando e imprimindo no mesmo bash! Então quando eu logar como myUser e digite cada comando no console bash ele funciona bem

$su - myUser
$export myVar=toto
$echo $myVar
toto

Eu estou sentindo falta de algo?
Por que isso está acontecendo e como posso exportar uma variável temporária como outro usuário (não tenho permissão para editar o bashrc ou qualquer outro arquivo de sistema)

    
por storm 07.05.2018 / 18:10

2 respostas

1

use env :

su - myUser -c "env myVar=\"$toto\" scriptThatNeedsMyVar.sh"

Assumindo, é claro, que scriptThatNeedsMyVar.sh é executável e pode ser encontrado em myUser PATH e começa com #!/bin/sh .

    
por waltinator 07.05.2018 / 19:58
1

Como Byte Commander explicou , você tem que colocar o comando entre aspas simples para evitar que o Bash expanda a variável. Se $toto tiver que ser expandido no shell original, forneça-o como um argumento fora da lista de comandos e acesse-o como $0 :

su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"
    
por dessert 07.05.2018 / 18:25