Запуск сценария оболочки без переменных среды

17

Как я знаю, вновь запущенный скрипт оболочки наследует переменные окружения. Есть ли способ заблокировать это? (запуск оболочки без наследования переменных)

Eonil
источник

Ответы:

21

Кажется, вы можете добавить к своему сценарию префикс, env -iкоторый очистит среду перед запуском сценария:

env -i sh test.sh

От man env:

-i, --ignore-environment
              start with an empty environment

Не уверен, почему вы хотели бы сделать это, хотя ...

vmfarms
источник
Благодарю. Это сработало! Мне это нужно для вызова скрипта сборки в IDE без влияния на переменные среды конфигурации IDE. Но все еще далеко до цели. Это может помочь вашему любопытству!
Эонил
Чтобы добавить еще один вариант использования: я сейчас оцениваю fish и zsh как альтернативу bash. Но я не совсем готов рекламировать подходящую оболочку в качестве оболочки входа в систему (например, chsh ...если я просто открою окно терминала и запустлю zshили fish(с или без -lзначения), это загрязняет мою среду всеми видами переменных из Оболочка Я начал это. Выполнение трюка с env -cрешает эту проблему для меня. Я делаю env -i TERM=xterm-256color $(which fish).
Paidhi
Это полезно, если у вас есть задача cron, которая не выполняется, потому что среда не настроена должным образом, и вам нужно ее протестировать; также хороший способ проверить, делают ли ваши скрипты предположения о настройках среды. Благодарность!
прорвался
Еще одно возможное место, которое может быть полезно, - это тестирование некоторых периодических заданий (например, заданий cron), чтобы убедиться, что в сценарии нет зависимостей от среды. То же самое с командами, которые будут запускаться в ресурсе "Exec" в манифесте марионетки.
TommyTheKid
1

Одна возможность (хотя это выглядит довольно некрасиво):

exec -c $SCRIPTзапустит $ SCRIPT с пустой средой. (см. man bashпоиск exec \[-cl\]).

weeheavy
источник
1
С env -i это работало почти одинаково, однако я решил использовать env -i, потому что exec прекращает выполнение остальной части скрипта.
Эонил
-1

Насколько я знаю, ответ - «Нет». Вы можете переопределить переменные среды внутри самого скрипта. Значение переменной среды должно вернуться к своему первоначальному значению после завершения работы скрипта. Вероятно, вам нужно запустить скрипт как дочерний процесс: $ this.script.sh &, чтобы избежать необходимости выходить из вашей оболочки каждый раз, когда вы запускаете скрипт, чтобы сбросить переменные среды к их первоначальному значению.

Редактировать:

Из более раннего плаката может показаться, что я ошибаюсь из-за того, что это невозможно.

user53079
источник