Para algunas sesiones de shell, quiero poder imprimir un indicador de advertencia si una variable de shell no está configurada y exportada.
Es bastante simple hacer algo como esto para imprimir "Error" en el mensaje si no SET_ME
está configurado o es nulo.
test_var () { test -z "$1" && echo Error; }
PS1='$(test_var "$SET_ME") \$ '
Sin embargo, esto no se marca si lo configuro SET_ME
sin exportarlo, lo cual es un error que deseo poder detectar. A falta de algo parecido $(bash -c 'test -z "$SET_ME" && echo Error;')
o grepping de la salida export
, ¿hay una simple comprobación que pueda hacer para probar si SET_ME
se ha exportado?
Una solución que no sea POSIX y solo bash es completamente aceptable.
bash
environment-variables
CB Bailey
fuente
fuente
typeset
atributos.-z "$1"
supone que estoy pasando el valor de una variable atest_var
(como era) mientras quedeclare -p
espera su nombre. Se me ocurrió con esta prueba que toma el nombre de una variable del shell:test_exported_notnull () { re='^declare -\w*x'; [[ -n $(eval echo \$$1) ]] && [[ $(declare -p "$1") =~ $re ]]; }
.eval
, simplemente agregue esta primera línea:,var=$1
luego use[[ -z "${!var}" ]] && echo Error
.Sé que la pregunta tiene 3 años, sin embargo, uno puede encontrar la siguiente solución más simple:
respuestas, si la variable se exporta y tiene un valor no vacío.
fuente
En Bash 4.4 o posterior , puede usar la
${parameter@a}
expansión de parámetros de shell para obtener una lista de atributos sobre un parámetro, incluso si se exporta.Aquí hay una función simple que demuestra
${parameter@a}
, que le dirá si se exporta una variable dada, dado su nombre:Ejemplo de uso:
Cómo funciona:
El formato devuelto por
${parameter@a}
es un carácter por atributo, y el significado de cada carácter de atributo proviene de las opciones correspondientes del comando declarar (en este caso, queremos buscarx
) exportado.fuente
Puede usar
compgen
con su-X
opción para determinar si se exporta una variable:P.ej:
fuente
Si me resigno a tener que usar
export
ygrep
, la prueba más simple es probablemente algo como esto.o si quiero no nulo también:
fuente
export
no está especificado, y define un formato preciso paraexport -p
similar a bashexport
pero diferente. ¡Pero bash parece ignorar POSIX y usar el mismo formato queexport
paraexport -p
!El
export
comando, dado sin parámetros, proporciona una lista de nombres exportados en el entorno actual:Algunos cortes y sedimentos eliminan la pelusa:
Ahí está su lista de exportaciones, lista para su posterior procesamiento.
fuente
export
") ya que mi uso planificado está en mi solicitud.export
, y esto fue lo único que se me ocurrió. Tampoco se escapa la ayuda del shell. Elexport
está incorporado de todos modos, pero dudo que puedas evitarlogrep
.El método más simple en el que actualmente puedo pensar:
fuente