Я пытаюсь установить переменную среды для пользовательского сеанса перед запуском сценария:
su - myUser -c "export myVar=$toto ; sh scriptThatNeedsMyVar.sh"
Сценарии не выполняются, я попытался отладить и вывести значение myVar:
su - myUser -c "export myVar=$toto ; echo $myVar"
ничего не возвращает, это означает, что моя переменная env не была создана, хотя я создаю и печатаю ее в том же bash! Затем, когда я вхожу как myUser
и набираю каждую команду в консоли bash, она работает хорошо
$su - myUser
$export myVar=toto
$echo $myVar
toto
Я что-то упускаю?
Почему это происходит и как я могу экспортировать временная переменная от имени другого пользователя (мне не разрешено редактировать bashrc или любой другой системный файл)
использовать env
:
su - myUser -c "env myVar=\"$toto\" scriptThatNeedsMyVar.sh"
Принятие, конечно, это scriptThatNeedsMyVar.sh
исполняемый файл, и findable в myUser
PATH
, и начинается #!/bin/sh
.
Как Командующий Байта объяснил, необходимо поместить команду в одинарные кавычки, чтобы препятствовать тому, чтобы Bash развернул переменную. Если $toto
должен быть расширен в исходной оболочке, обеспечить его как аргумент вне списка команд и получить доступ к нему как $0
:
su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"