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_MEestá 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_MEsin 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_MEse ha exportado?
Una solución que no sea POSIX y solo bash es completamente aceptable.
bash
environment-variables
CB Bailey
fuente
fuente

typesetatributos.-z "$1"supone que estoy pasando el valor de una variable atest_var(como era) mientras quedeclare -pespera 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=$1luego 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
compgencon su-Xopción para determinar si se exporta una variable:P.ej:
fuente
Si me resigno a tener que usar
exportygrep, la prueba más simple es probablemente algo como esto.o si quiero no nulo también:
fuente
exportno está especificado, y define un formato preciso paraexport -psimilar a bashexportpero diferente. ¡Pero bash parece ignorar POSIX y usar el mismo formato queexportparaexport -p!El
exportcomando, 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. Elexportestá incorporado de todos modos, pero dudo que puedas evitarlogrep.El método más simple en el que actualmente puedo pensar:
fuente