Установите env var в bash скрипт - PullRequest
0 голосов
/ 06 августа 2020

Должен признать, что я очень устарел со скриптами bash. Я хочу установить 2 временных переменных env, а затем запустить двоичный файл.

Команда выглядит так:

ENV_1=firstparam ENV_2=secondparam my_binary

Я хочу переместить 2 назначения переменных env в скрипте bash и используйте такую ​​команду:

setparams.sh my_binary

setparams. sh

#!/bin/bash
ENV_1=firstparam
ENV_2=secondparam

Что здесь не так? Почему не устанавливаются вары?

Ответы [ 3 ]

3 голосов
/ 07 августа 2020

Поскольку вы передаете my_binary в качестве аргумента скрипту, я предполагаю, что вы хотите, чтобы скрипт (а) установил переменные среды, а затем (б) вызвал команду, которую вы ему отправили.

Один из способов сделать это:

#!/bin/bash

ENV_1=firstparam ENV_2=secondparam "$@"

«$ @» расширяется до списка аргументов, которые вы передали скрипту.

Если вы установите такие переменные, они будут унаследованы в среде любой команды, которую вы запускаете в той же командной строке , но не с помощью любых последующих команд.

Если вы хотите выполнить более одной команды с этими переменными среды, вы можете сделать :

#!/bin/bash

export ENV_1=firstparam
export ENV_2=secondparam
some_command
some_other_command

Тогда $ENV_1 и $ENV_2 появятся в среде some_command и some_other_command, но не в среде вашей оболочки после set_params.sh завершается.

Если вы хотите, чтобы сценарий устанавливал переменные среды, которые будут доступны в вашей интерактивной оболочке, вам нужно будет вызвать его с помощью . ./set_params.sh или source ./set_params.sh. (И в этом случае вам не нужен #!/bin/bash вверху, поскольку он будет выполняться в вашей текущей оболочке.)

2 голосов
/ 07 августа 2020

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

export ENV_1=firstparam
export ENV_2=secondparam

Кроме того, вместо выполнения вы должны вызвать source (встроенная команда, которая выполняет содержимое файла передано как аргумент в текущей оболочке):

source setparams.sh && my_binary
0 голосов
/ 07 августа 2020

Вам необходимо экспортировать переменные среды:

setparams. sh

#!/usr/bin/env bash

# Export environment variables
export ENV_1=firstparam
export ENV_2=secondparam

# Launch binary with its provided arguments
"$@"

Тестирование:

./setparams.sh bash -c 'echo "$ENV_1"'

Вывод :

firstparam
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...