Estoy escribiendo un script de shell, donde tengo que verificar si la variable de entorno está configurada, si no está configurada, entonces tengo que configurarla. ¿Hay alguna manera de verificar el script de shell, ya sea que una variable de entorno ya esté configurada o no?compruebe si la variable de entorno ya está configurada
Respuesta
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
Quiero hacer hincapié en que [ -z $VARIABLE ]
no es suficiente, porque puede tener VARIABLE
pero no se exportó. Eso significa que no es una variable de entorno en absoluto.
¿Funcionará esto en todos los entornos de shell? – Mojoy
@Senthilnathan: sí, por supuesto, lo único que podría reescribirse para hacer que este código sea más portátil es 'grep -q'. Uno podría escribir 'env | grep^VARIABLE =>/dev/null' en su lugar. –
Si exporto una variable, luego establezco la variable en otra cosa sin exportarla, ¿termino con una discrepancia entre mi variable no exportada y mi variable exportada, o también actualizará automágicamente la exportada? – ArtOfWarfare
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
Esto comprueba si la longitud de $ VARIABLE es cero.
Lo que se quiere hacer es nativa en bash, se denomina sustitución de parámetros:
VARIABLE="${VARIABLE:=abc}"
Si la variable no está definida, lado derecho será igual a ABC. Tenga en cuenta que el operador interno: = puede reemplazarse por: - que comprueba si VARIABLE no está configurado o vacío.
Exactamente lo que estaba buscando. La línea 'export TEST_DATABASE_NAME =" $ {TEST_DATABASE_NAME: = prodlike} "' solo usará prodlike como valor predeterminado si TEST_DATABASE_NAME no estuviera definido. Sin bloques condicionales desordenados. Todo en una línea de código. –
La solución estándar para asignar una variable condicional (ya sea en el entorno o no) es:
: ${VAR=foo}
que establecerá VAR para el valor "foo" sólo si no está definido.
Para establecer VAR para "foo" si var no está definido o la cadena vacía, utilice:
: ${VAR:=foo}
Para poner VAR en el medio ambiente, el seguimiento con:
export VAR
También se puede hacer export VAR=${VAR-foo}
o export VAR=${VAR:=foo}
, pero algunos shells antiguos no son compatibles con la sintaxis de asignación y exportación en la misma línea. Además, DRY; usar el nombre en ambos lados del operador =
es una repetición innecesaria. (Una segunda línea que exporta la variable infringe el mismo principio pero se siente mejor).
Tenga en cuenta que, en general, es muy difícil determinar si una variable está en el entorno. El análisis de la salida env
no funcionará. Considere:
export foo='
VAR=var-value'
env | grep VAR
Tampoco funciona para generar un subnivel y la prueba:
sh -c 'echo $VAR'
que indicarían el VAR se encuentra en el subnivel, lo que sería un indicador de que VAR está en el entorno de el proceso actual, pero puede ser simplemente que VAR esté configurado en la inicialización de la subshell. Funcionalmente, sin embargo, el resultado es el mismo que si VAR está en el entorno. Afortunadamente, generalmente no te importa si VAR está en el medio ambiente o no. Si lo necesitas allí, ponlo allí. Si lo necesita, sáquelo.
¿Podría agregar una explicación de cómo funciona la notación ': $ {VAR: = foo}' internamente? Siempre lo encuentro como LA solución, pero nunca CÓMO realmente funciona. –
Encontré alguna explicación sobre [StackOverflow] (http://stackoverflow.com/questions/4437573/bash-assign-default-value)! –
- 1. Compruebe si el archivo ya está abierto
- 2. Smarty: compruebe si la variable está en la matriz
- 3. Comprobando si la cookie está configurada
- 4. Cómo verificar si la alarma está configurada
- 5. NSMutableArray compruebe si el objeto ya existe
- 6. Compruebe si la cadena está vacía
- 7. ¿Cómo verificar si una variable ya está declarada (T-SQL)?
- 8. OSX: compruebe si la pantalla está bloqueada
- 9. compruebe si la 1ª opción está seleccionada
- 10. Compruebe si "exec" está deshabilitado
- 11. Compruebe si la consola está presente
- 12. ¿Cómo verifico si una variable Smarty ya está asignada?
- 13. compruebe si NSNumber está vacío
- 14. SQLAlchemy: compruebe si el objeto ya está presente en la tabla
- 15. Compruebe si un archivo está abierto
- 16. Django: compruebe si ya existe un objeto antes de agregar
- 17. Verifica si la sesión está configurada o no, y si no creas una?
- 18. Compruebe si una variable es una matriz
- 19. Compruebe si la aplicación está disponible en Android Market
- 20. AS3: compruebe si un diccionario está vacío
- 21. WP7 compruebe si Internet está disponible
- 22. ¿Cómo puedo usar un valor predeterminado si una variable de entorno no está configurada para el filtrado de recursos en maven?
- 23. Compruebe si OpenCV está compilado con TBB
- 24. La variable de entorno BASEDIR no está definida correctamente
- 25. Compruebe si $ _POST-value está vacío
- 26. Compruebe si una matriz está vacía
- 27. Compruebe si un puerto está abierto
- 28. Extensión de Firefox: compruebe si la ventana está minimizada
- 29. Linux: compruebe si la cola de mensajes está vacía
- 30. Compruebe si la base de datos está vacía
En realidad, este no es un verdadero duplicado de esa pregunta: el OP aquí quiere saber si se estableció una variable, y si no se hace algo al respecto, en lugar de salir de un script. $ {V :?} no es una respuesta válida en ese caso. 'conjunto | grep -q '^ V =' 'es. Esto prueba la presencia de la variable y funciona incluso si la variable se estableció, pero a la cadena vacía. – Coroos