Установка переменных среды для скрипта в локальной переменной функции bash - PullRequest
5 голосов
/ 16 января 2012

У меня есть функция Unix Bash, которая выполняет сценарий, который анализирует пользовательские переменные среды.Я хочу избежать экспорта соответствующих переменных в bash и вместо этого устанавливать их только для скрипта, как часть команды выполнения.

Если я устанавливаю переменные непосредственно в команде - например, VARNAME=VARVAL script_name-- это работает хорошо.Однако, поскольку я хочу установить несколько переменных на основе разных условий, я хочу использовать локальную переменную функции для хранения настроек переменных среды, а затем использовать эту переменную в команде выполнения скрипта.У меня есть локальная переменная "vars", которая в конечном итоге установлена, например, на VARNAME=VAR, но если я пытаюсь запустить ${vars} script_name из своей функции bash, я получаю "команду не найдена" ошибка дляприсваивание переменной $ vars - т.е. содержимое $ vars интерпретируется как команда, а не как присваивание переменных среды.

Я пробовал разные варианты синтаксиса команды, но пока безрезультатно.В настоящее время я должен экспортировать соответствующие переменные в функцию, прежде чем вызывать скрипт, а затем сбросить / сбросить их до прежних значений, но это не совсем то решение, на которое я надеялся.

Любая помощь будетс благодарностью.

Спасибо, Шарон

Ответы [ 2 ]

3 голосов
/ 16 января 2012

Чтобы оценить содержимое ваших переменных как выражение, а не как команду, вы можете попробовать использовать eval:

eval ${vars} script_Name
2 голосов
/ 16 января 2012

Однако, поскольку я хочу установить несколько переменных на основе разных условий, я хочу использовать локальную переменную функции для хранения настроек переменных среды, а затем использовать эту переменную в команде выполнения скрипта.

Вам не нужно хранить переменные в отдельной переменной.Команде можно назначить более одной переменной:

$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
echo "$bar"
$ foo=abc bar=def ./test.sh 
abc
def

Это также имеет преимущество в том, что безопаснее, чем eval.

...