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
.
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)
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
.
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"