如何使用默认环境变量执行程序(特别是 bash 别名)?
考虑这个例子:
export test="something I dont want to exist"
alias _xterm='xterm -fn 7x13 -fa "Ubuntu Mono:size=12:antialias=false"'
_xterm
在生成的实例中,不应设置xterm
该变量。$test
答案1
env -i _xterm
快速测试工具:
$ export TMUX=3
$ bash -c 'echo $TMUX'
3
$ env -i bash -c 'echo $TMUX'
# nothing echos
保存$DISPLAY
、$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
答案2
默认环境变量的名称用大写字母书写。现在,假设您将用小写字母定义新的环境变量(如您的示例中所示test
),而不是使用简单的别名_xterm
,您可以使用一个函数_xterm
来取消设置新的环境变量并仅保留新 shell 实例的默认环境变量:
_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"
}
这样,你的新环境变量在新的 shell 实例中不可用,但是当你返回到旧的 shell 实例时你仍然可以使用它们。