Quiero un script bash que establezca varias variables de entorno (ID de usuario, contraseña, token) en algunos valores predeterminados si aún no existen. La prueba de existencia funciona en la CLI pero no en el script.
magilla@raspberrypi:~ $ ps -p $$
PID TTY TIME CMD
3005 pts/0 00:00:05 bash
magilla@raspberrypi:~ $ echo "${BASH_VERSION}"
5.1.4(1)-release
magilla@raspberrypi:~ $ env | grep var
magilla@raspberrypi:~ $ [[ -v var ]] && echo "\${var} not defined" || echo "\${var} is defined"
${var} not defined
magilla@raspberrypi:~ $ cat myscript
#!/bin/bash
[[ -v var ]] && echo "\${var} not defined" || echo "\${var} is defined"
magilla@raspberrypi:~ $ bash myscript
${var} is defined
magilla@raspberrypi:~ $ bash < myscript
${var} is defined
Respuesta1
Aparentemente var
está configurado en su shell interactivo (aunque no está en el entorno). Luego [[ -v var ]]
devuelve el éxito y echo "\${var} not defined"
se ejecuta.
Verás not defined
porque la lógica de tu código es incorrecta.
En el script var
no está configurado, [[ -v var ]]
devuelve error y echo "\${var} is defined"
se ejecuta.
Ya ves is defined
porque nuevamente la lógica está equivocada. La siguiente lógica tiene sentido:
[[ -v var ]] && echo "\${var} is defined" || echo "\${var} not defined"
Es opuesto a la lógica de su código.