Para algumas sessões de shell, desejo poder imprimir um sinalizador de aviso se uma variável de shell não for definida e exportada.
É bastante simples fazer algo assim para imprimir "Erro" no prompt, se SET_ME
não estiver definido ou nulo.
test_var () { test -z "$1" && echo Error; }
PS1='$(test_var "$SET_ME") \$ '
No entanto, isso falha ao sinalizar se eu definir SET_ME
sem exportá-lo, o que é um erro que desejo detectar. $(bash -c 'test -z "$SET_ME" && echo Error;')
Exceto por algo parecido ou com saudação na saída export
, existe uma verificação simples que posso fazer para testar se SET_ME
foi exportada?
Uma solução não-POSIX, somente bash, é completamente aceitável.
bash
environment-variables
CB Bailey
fonte
fonte
typeset
atributos.-z "$1"
assume que eu estou passando o valor de uma variável paratest_var
(como eu estava) enquantodeclare -p
espera seu nome. Eu vim com este teste, que leva o nome de uma variável de shell:test_exported_notnull () { re='^declare -\w*x'; [[ -n $(eval echo \$$1) ]] && [[ $(declare -p "$1") =~ $re ]]; }
.eval
, basta adicionar esta primeira linha: evar=$1
, em seguida, use[[ -z "${!var}" ]] && echo Error
.Sei que a pergunta tem 3 anos, no entanto, pode-se encontrar a seguinte solução mais simples:
respostas, se a variável for exportada e tiver um valor não vazio.
fonte
No Bash 4.4 ou posterior , você pode usar a
${parameter@a}
expansão de parâmetros do shell para obter uma lista de atributos sobre um parâmetro, incluindo se ele é exportado.Aqui está uma função simples demonstrativa
${parameter@a}
, que informa se uma determinada variável é exportada, devido ao seu nome:Exemplo de uso:
Como funciona:
O formato retornado por
${parameter@a}
é um caractere por atributo, com o significado de cada caractere de atributo vindo das opções correspondentes do comando declare - neste caso, queremos procurarx
- exportado.fonte
Você pode usar
compgen
com sua-X
opção para determinar se uma variável é exportada:Por exemplo:
fonte
Se eu me resignar a ter que usar
export
egrep
, o teste mais simples provavelmente será algo assim.ou se eu quiser não nulo também:
fonte
export
não é especificado e define um formato preciso paraexport -p
similar ao bash,export
mas diferente. Mas o bash parece ignorar o POSIX e usa o mesmo formato queexport
paraexport -p
!O
export
comando, fornecido sem parâmetros, fornece uma lista de nomes exportados no ambiente atual:Alguns cortes e sedações se livram do cotão:
Aqui está sua lista de exportações, pronta para processamento adicional.
fonte
export
"), pois meu uso planejado é rápido.export
, e essa foi a única coisa que me veio à cabeça. Nenhuma ajuda do shell também escapa. Oexport
está embutido de qualquer maneira, mas duvido que você possa evitar ogrep
.O método mais simples em que posso pensar atualmente:
fonte