Я хочу запустить программу в пустой среде (то есть без установленных переменных). Как это сделать в Bash?
bash
environment-variables
Евгений Ярмаш
источник
источник
Ответы:
Вы можете сделать это с
env
:В отличие от комментариев ниже, это делает совершенно ясно из окружающей среды, но это не мешает
your_command
установить новые переменные. В частности, запуск оболочки вызовет/etc/profile
запуск, и оболочка может иметь также некоторые встроенные настройки.Вы можете проверить это с:
т.е. протрите окружающую среду и затем напечатайте это. Вывод будет пустым.
источник
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
печатает/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.PATH
,PWD
иSHLVL
устанавливаются автоматически Bash. +1.env -i bash --norc -c "declare -p PATH"
givedeclare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
. Обратите внимание на «-x» для экспортируемой (и, следовательно, части среды), если вы экспортируете ее самостоятельно:env -i bash --norc -c "export PATH; declare -p PATH"
givedeclare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
«Чистая»
bash
среда может иметь место сКоманда
env -i
выполняет команду, переданную ей в командной строке, без передачи каких-либо экспортированных переменных среды старой среды оболочки в среду исполняемой программы.Эта
--noprofile
опция останавливаетbash
чтение общесистемных или личных сценариев инициализации оболочки, которые в противном случае считывались бы для оболочки входа в систему.Эта
--norc
опция останавливаетbash
чтение сценариев инициализации личной оболочки, которые в противном случае считывались бы для интерактивной оболочки.источник
env -i
? На какой ты системе?env
чтобы очистить мою среду, и--noprofile
избежать поиска / etc / profile и друзей, и--norc
избежать поиска ~ / .bashrc и друзей.env -i somecommand
запускает команду в пустой среде, как уже упоминалось в ams .Многие программы используют некоторые важные переменные среды, поэтому вы можете захотеть сохранить их:
Кроме того, вы можете войти в небольшую среду входа в систему.
источник
env
не поддерживает--
разграничение иenv -i FOO=bar -- env
попытки запуска команды с именем--
.env -i -- FOO=bar env
самом деле. Виноват. Не то, чтобы--
это было полезно, поскольку то, что следует, не начинается с-
.Хотя принятый ответ правильный, обычно вы хотите:
env -i bash -l -c "printenv; and any other commands"
Это дает вам простой, но функциональный bash (такой же, какой вы получили бы при входе в неинтерактивный режим). Это, например, устанавливает язык, часовой пояс, HOME и т. Д.
источник
env -i
очищаетHOME
, что означает, чтоbash -l
вы не можете найти ваш.bash_profile
и т. Д. Если вам нужна оболочка, похожая на ту, которую вы получили бы при новом входе в систему, вам нужно установить дополнительное косвенное указание вHOME
первую очередь.Проблема с большинством ответов здесь в том, что она
env -i
очищаетсяHOME
, поэтому, даже если вы запуститеbash -l
ее изнутри, она не будет читать ваши.bash_profile
и т. Д. Если вы ищете оболочку, которая действует так, как будто вы только что сделали новый вход в систему, вы хотел бы вместо этого:Пример:
источник
bash
будет запущена оболочка входа.bash_login
или.bash_profile
. Чтобы получить чистую среду, используйте--noprofile
или установитеHOME
каталог, в котором нет этих файлов. Я полагаю, это зависит от того, что вы подразумеваете под «чистым».env -i bash -c ...
. Этот ответ специально для случаев, когда вам нужна оболочка, которая выглядит так, как будто вы только что сделали новый вход в систему на компьютере.Чтобы ответить на комментарий Балки (и отвечая на мой собственный вопрос в процессе :-):
источник
/usr/bin/env: invalid option -- ' ' Try '/usr/bin/env --help' for more information.
--ignore-environment
я получу следующее:/usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.