Как выполнить программу (в частности псевдоним bash) с переменными среды по умолчанию?
Рассмотрим пример:
export test="something I dont want to exist"
alias _xterm='xterm -fn 7x13 -fa "Ubuntu Mono:size=12:antialias=false"'
_xterm
В порожденном экземпляре xterm
переменная $test
не должно быть установлено.
Имена переменных среды по умолчанию пишутся заглавными буквами. Теперь, предполагая, что вы будете определять новые переменные окружения с крошечными буквами (как в вашем примере test
), вместо того, чтобы использовать простой псевдоним _xterm
, вы можете использовать функцию _xterm
, где вам нужно сбросить новый Переменные среды и сохраняют только переменные среды по умолчанию для нового экземпляра оболочки:
_xterm () {
for var in $(env | cut -d"=" -f1)
do
if [[ ! "$var" =~ [^a-z] ]]; then
unset $var #or env -u $var
fi
done
xterm -fn 7x13 -fa "Ubuntu Mono:size=12:antialias=false"
}
Таким образом, ваши новые переменные среды недоступны в новом экземпляре оболочки, но когда вы возвращаетесь к старому экземпляру оболочки, вы все еще может использовать их.
Вы можете выполнить свою команду в пустой среде. :
env -i _xterm
Быстрая проверка:
$ export TMUX=3
$ bash -c 'echo $TMUX'
3
$ env -i bash -c 'echo $TMUX'
# nothing echos
Сохранение [ 114], $USER
и т. Д .:
$ env -i bash -c 'echo $DISPLAY'
# nothing
$ env -i DISPLAY=$DISPLAY bash -c 'echo $DISPLAY'
:0
Или вы можете явно исключить только некоторые переменные с опцией env -u
:
$ export TMUX=3
$ env -u TMUX bash -c 'echo $TMUX'
# nothing