如何执行具有默认变量的程序?

如何执行具有默认变量的程序?

如何使用默认环境变量执行程序(特别是 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 实例时你仍然可以使用它们。

相关内容