Quand utilisons-nous l' set -k
option dans bash?
Le manuel de référence de Bash dit,
Tous les arguments sous forme d'instructions d'affectation sont placés dans l'environnement pour une commande, pas seulement ceux qui précèdent le nom de la commande.
Je comprends ce que fait l'option, mais je ne pouvais pas imaginer quand nous en avons besoin.
-k
nous permet d'exécuter des scripts shell de 30 ans sans avoir besoin de les refactoriser. Passez à la place des variables d'environnement temporaires en utilisant la syntaxe de préfixe:var1=x var2=y command ...
Réponses:
Vous pouvez en principe l'utiliser à tout moment pour "injecter" les variables d'environnement passées dans un script shell (en tant qu'arguments) comme si elles étaient définies dans l'environnement via
export
, mais sans avoir à les faire résider en permanence dansexport
la liste de avant d'exécuter des commandes .NOTE: Il y a aussi la forme longue du
-k
commutateur,set -o keyword
.Exemple
Maintenant, si je
set -k
:Mais si je devais simplement exécuter le script ci-dessus:
Que fait l'exportation?
Donc, si nous devions ajouter
export | grep VAR
à notre script comme ceci:Et nous avons à nouveau exécuté nos tests ci-dessus:
Mais sans
set -k
:Cela
set -k
nous permet également d'exporter temporairement des variables en masse.Un autre exemple
Lorsque nous définissons plusieurs variables, elles sont toutes exportées:
Alors, c'est juste injecter toutes les variables d'environnement?
Non
-k
fait une chose très explicite ici. Il s'agit uniquement d'exporter des variables qui étaient incluses sur la ligne de commande lors de l'exécution d'une commande.Exemple
Disons que j'ai défini cette variable:
Maintenant, lorsque nous exécutons la même commande en omettant
VARCMD1="hi"
:Mais pourquoi cela existe-t-il?
J'ai trouvé cette source qui explique un peu cette fonctionnalité, intitulée: "Chaînes d'assignation de paramètres de mots clés". REMARQUE: l' URL source utilise une adresse IP, je ne peux donc pas y accéder directement ici sur SE.
la source
set -k
ils ont d'-o keyword
ailleurs donné l'-k
option. Est-ce que cela signifie quelque chose?set -o keyword
est la forme longue deset -k
. Tu voishelp set | grep -- '-k'
../cmd.bash VARCMD=hi
doitset -k
le faire fonctionner exactement comme leVARCMD=hi ./cmd.bash
fait sansset -k
. Devinez que la question spécifique du PO porte sur la nécessité pour bash de prendre en charge le./cmd.bash VARCMD=hi
formulaireToute utilisation pratique de
set -k
est probablement un style personnel. Certains - peut-être ceux qui aiment les langages de programmation qui offrent la possibilité d'utiliser des arguments de mots clés dans les appels de fonction, ou ces quelques personnes qui aiment ladd
syntaxe de la commande - peuvent préférerà
La raison réelle pour laquelle l'option existe dans certains shells est expliquée dans la justification de la commande set dans la norme POSIX :
la source