¿Cuándo usamos la set -k
opción en bash?
El manual de referencia de Bash dice:
Todos los argumentos en forma de declaraciones de asignación se colocan en el entorno de un comando, no solo los que preceden al nombre del comando.
Entiendo lo que hace la opción, pero no podía imaginar cuándo la necesitamos.
-k
nos permite ejecutar scripts de shell de 30 años sin la necesidad de refactorizarlos. Pase variables de entorno temporales utilizando la sintaxis de prefijo en su lugar:var1=x var2=y command ...
Respuestas:
Básicamente, puede usarlo en cualquier momento que desee "inyectar" las variables de entorno pasadas a un script de shell (como argumentos) como si estuvieran establecidas en el entorno a través de
export
, pero sin tener que tener que residir permanentemente enexport
la lista antes de ejecutar comandos .NOTA: También existe la forma larga del
-k
interruptor,set -o keyword
.Ejemplo
Ahora si yo
set -k
:Pero si solo ejecutara el script anterior:
¿Qué hace la exportación?
Entonces, si tuviéramos que agregar
export | grep VAR
a nuestro script así:Y volvimos a ejecutar nuestras pruebas anteriores:
Pero sin
set -k
:Entonces,
set -k
nos permite exportar temporalmente variables en masa.Otro ejemplo
Cuando establecemos múltiples variables, todas se exportan:
Entonces, ¿solo está inyectando todas las variables de entorno?
No
-k
está haciendo algo muy explícito aquí. Solo exporta variables que se incluyeron en la línea de comando cuando se ejecutó un comando.Ejemplo
Digamos que configuro esta variable:
Ahora cuando ejecutamos el mismo comando omitiendo
VARCMD1="hi"
:¿Pero por qué existe esto?
Encontré esta fuente que explica un poco sobre esta característica, titulada: "Cadenas de asignación de parámetros de palabras clave". NOTA: La URL de origen utiliza una dirección IP, por lo que no puedo vincularla directamente aquí en SE.
fuente
set -k
porque han dado-o keyword
además de la-k
opción. ¿Eso significa algo?set -o keyword
es la forma larga deset -k
. Verhelp set | grep -- '-k'
../cmd.bash VARCMD=hi
necesitaset -k
que funcione exactamente como loVARCMD=hi ./cmd.bash
hace sin elset -k
. Supongo que la pregunta específica del OP se refiere a la necesidad de bash para admitir el./cmd.bash VARCMD=hi
formularioCualquier uso práctico de
set -k
es probable que sea solo un estilo personal. Algunos, tal vez aquellos a quienes les gustan los lenguajes de programación que ofrecen la capacidad de usar argumentos de palabras clave en llamadas a funciones, o aquellas pocas personas a las que les gusta ladd
sintaxis del comando, pueden preferira
La razón real por la que existe la opción en algunos shells se explica en la justificación del comando set en el estándar POSIX :
fuente