Как экспортировать переменные env как другой пользователь

Я пытаюсь установить переменную среды для пользовательского сеанса перед запуском сценария:

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 или любой другой системный файл)

1
задан 7 May 2018 в 19:19

2 ответа

использовать env:

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

Принятие, конечно, это scriptThatNeedsMyVar.sh исполняемый файл, и findable в myUser PATH, и начинается #!/bin/sh.

2
ответ дан 7 December 2019 в 12:29

Как Командующий Байта объяснил, необходимо поместить команду в одинарные кавычки, чтобы препятствовать тому, чтобы Bash развернул переменную. Если $toto должен быть расширен в исходной оболочке, обеспечить его как аргумент вне списка команд и получить доступ к нему как $0:

su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"
1
ответ дан 7 December 2019 в 12:29

Другие вопросы по тегам:

Похожие вопросы: