Установка переменных с помощью команды exec

Вы можете установить переменную для одной команды следующим образом:

MY_VARIABLE=my_value ./my_script.sh

Вы можете передать другой script следующим образом:

exec ./my_script.sh

Но когда я пытаюсь сделать так:

exec MY_VARIABLE=my_value ./my_script.sh

Я получаю сообщение об ошибке:

exec: MY_VARIABLE=my_value: not found

Почему это? Есть ли способ сделать это?

Ответ 1

Вам нужно использовать env для указания переменной среды:

exec env MY_VARIABLE=my_value ./my_script.sh

Если вы хотите, чтобы ваш script начинался с пустой среды или только с указанными переменными, используйте параметр -i.

От man env:

   env - run a program in a modified environment

Ответ 2

В bash вы можете установить переменные среды для команды, поставив назначения в начале команды. Это работает так же для exec, как и любая другая команда, поэтому вы пишете:

MYVARIABLE=my_value exec ./my_script.sh