Запуск сценарію оболонки без змінних середовищ


17

Як я знаю, щойно запущений скрипт оболонки успадковує його змінні середовища. Чи є спосіб блокувати це? (запущена оболонка без успадкування змінної)

Відповіді:


21

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

env -i sh test.sh

Від man env:

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

Не впевнений, чому ви хочете це зробити, хоча ...


Спасибі. Це спрацювало! Мені це потрібно для виклику сценарію збирання в IDE, не впливаючи на змінні середовища ID конфігурації. Але все ще далеко до мети. Це може допомогти вашій цікавості!
Еоніл

Щоб додати ще один випадок використання: я зараз оцінюю рибу та zsh як альтернативу bash. Але я не зовсім готовий просувати оболонку кандидата як свою оболонку входу (як в chsh .... Якщо я просто відкрию вікно терміналу і запускаю zshабо fish(з або без -lзначення не має значення), це забруднює моє середовище всілякими змінними з оболонка я почав це робить трюк с. env -cвирішує цю проблему для мене і я. env -i TERM=xterm-256color $(which fish).
Paidhi

Це корисно, якщо у вас є завдання cron, яке не вдається, оскільки середовище не налаштовано належним чином, і вам потрібно його перевірити; також хороший спосіб перевірити, чи ваші сценарії роблять припущення про налаштування середовища. Спасибі!
здивований

Іншим можливим місцем, яке може бути корисним, є тестування деяких періодичних завдань (наприклад, cron jobs), щоб переконатися, що немає екологічних залежностей від сценарію. Те ж саме з командами, які запускатимуться в ресурсі "Exec" у маріонетковому маніфесті.
TommyTheKid

1

Одна можливість (хоча це виглядає досить некрасиво):

exec -c $SCRIPTпочне $ SCRIPT з порожнім середовищем. (див. man bashпошук exec \[-cl\]).


1
Це майже однаково працювало з env -i, однак я вирішив використовувати env -i, оскільки exec перестає виконувати решту сценарію.
Eonil

-1

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

Редагувати:

З попереднього плаката, здавалося б, я помиляюся, що це неможливо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.