передать пользовательскую переменную env в nohup - PullRequest
0 голосов
/ 29 июня 2018

Как я могу заставить работать приведенный ниже код? Я хочу передать значение custom_var сценарию command.

$ command="echo $custom_var"
$ custom_var=myValue nohup $command > log.txt && cat log.txt 
$ # WRONG. Should be 'myValue'

Это не похоже на работу. Приведенный выше вывод должен вывести «myValue». Также попробовал:

$ command="echo \$custom_var"
$ custom_var=myValue nohup $command > log.txt && cat log.txt 
$ $custom_var # WRONG. Should be 'myValue'

Спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Вы сделали две ошибки. Первый - это синтаксис

var=val some_command

создает временную экспортируемую переменную, видимую только для some_command. Он не будет существовать после завершения этого утверждения. Таким образом, ваше последующее использование custom_var будет иметь любое значение, если оно вообще было, до запуска этого оператора.

Вторая ошибка в том, что вы не понимаете, как оболочки POSIX 1003 расширяют переменные, и чем отличаются переменные env от переменных не env. custom_var передается «сценарию command». Проблема в том, что вы пытаетесь проверить, требует ли родительская оболочка, в которой вы выполняете эти команды, расширения переменных. Попробуйте это вместо этого. Создайте файл с именем / tmp / cvar с таким содержанием:

echo custom_var is $custom_var
env | grep custom_var

Затем введите

custom_var=myValue sh /tmp/cvar
...