Como executo um programa com variáveis padrão?

1

Como posso executar um programa (especificamente um alias bash) com as variáveis de ambiente padrão?

Considere este exemplo:

export test="something I dont want to exist"

alias _xterm='xterm -fn 7x13 -fa "Ubuntu Mono:size=12:antialias=false"'

_xterm

Na instância xterm gerada, a variável $test não deve ser definida.

    
por kiri 11.10.2013 / 10:52

2 respostas

1

Você pode executar seu comando em um ambiente vazio :

env -i _xterm

Um arnês de teste rápido:

$ export TMUX=3
$ bash -c 'echo $TMUX'
3
$ env -i bash -c 'echo $TMUX'
# nothing echos

Preservando $DISPLAY , $USER , etc:

$ env -i bash -c 'echo $DISPLAY'
# nothing
$ env -i DISPLAY=$DISPLAY bash -c 'echo $DISPLAY'
:0

Ou você pode excluir explicitamente apenas algumas variáveis com a opção env -u :

$ export TMUX=3
$ env -u TMUX bash -c 'echo $TMUX'
# nothing
    
por Oli 11.10.2013 / 10:56
1

Os nomes das variáveis de ambiente padrão são escritos em letras maiúsculas. Agora, supondo que você definirá novas variáveis de ambiente com letras minúsculas (como no seu exemplo test ), em vez de usar um alias simples _xterm , você pode usar uma função _xterm onde você precisa remover o novo variáveis de ambiente e manter apenas as variáveis de ambiente padrão para a nova instância do 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"
}

Assim, suas novas variáveis de ambiente não estão disponíveis na nova instância do shell, mas quando você retornar à instância antiga do shell, ainda poderá usá-las.

    
por Radu Rădeanu 11.10.2013 / 12:47