Spécifier des arguments de ligne de commande comme les paires nom=valeur de script shell
Est-il possible de passer des arguments de ligne de commande de script shell que les paires nom /valeur, quelque chose comme
myscript action=build module=core
et puis dans mon script, récupérer la variable comme
$action
et la traiter?
Je sais que $1....et ainsi de suite peut être utilisé pour obtenir des variables, mais alors pourquoi ne pas être comme des paires nom /valeur. Même si elles le sont, le développeur à l'aide du script aurez à prendre soin de déclarer des variables dans le même ordre. Je ne veux pas que.
Je pense que votre réponse est ici: stackoverflow.com/questions/2642707/...
Oui, contrairement à la bash builtin
Je suppose que quelque chose comme ça est disponible uniquement pour les bash.Désolé je n'ai pas préciser, Im en utilisant tcsh.
Oui, contrairement à la bash builtin
getopts
, getopt
fonctionne avec tcsh ainsi.Je suppose que quelque chose comme ça est disponible uniquement pour les bash.Désolé je n'ai pas préciser, Im en utilisant tcsh.
OriginalL'auteur Neeraj | 2011-03-31
Vous devez vous connecter pour publier un commentaire.
Dans le Bourne shell, il est rarement utilisé l'option '
-k
" qui place automatiquement toutes les valeurs spécifiées commename=value
sur la ligne de commande dans l'environnement. Bien sûr, la Bourne/Korn/shell POSIX de la famille (y compris bash) aussi le fairename=value
éléments avant le nom de la commande:Dans des conditions normales d'POSIX-shell comportement, la
command
est invoqué avecname1
etname2
dans l'environnement, et avec quatre arguments. En vertu de la Bourne et Korn et bash, mais pas POSIX) shell-k
option, elle est invoquée avecname1
,name2
,name3
, etname4
dans l'environnement et à seulement deux arguments. Lebash
page de manuel (comme dansman bash
) ne mentionne pas l'équivalent de-k
mais il fonctionne comme la Bourne et Korn coquilles faire.Je ne pense pas que j'ai jamais utilisé (le
-k
option) au sérieux.Il n'y a aucun moyen de dire à partir du script (
command
) que les variables d'environnement ont été spécifiés uniquement pour cette commande, ils sont tout simplement des variables d'environnement dans l'environnement de script.C'est le plus proche de l'approche que je sais de ce que vous demandez. Je ne pense pas que quelque chose d'équivalent existe pour le C shell famille. Je ne connais pas d'autre argument analyseur qui définit les variables de
name=value
paires sur la ligne de commande.Avec certaines assez grandes mises en garde (il est relativement facile à faire pour des valeurs simples, mais difficiles à traiter avec des valeurs contenant l'interface méta-caractères), vous pouvez le faire:
Ce n'est pas le C shell famille. Le
eval
efficacement de l'interpréteur de commandes d'assignation.name=value command
. Cependant je ne trouve aucune explication dansman bash
. Est-il l'homme de la page de cette documentation?Je viens de trouver ça dans
man bash
: L'environnement pour toute commande simple ou une fonction peut être augmentée temporairement en préfixant avec le paramètre affectations, comme décrit ci-dessus dans les PARAMÈTRES. Ces déclarations de cession n'affectent que l'environnement vu par cette commande.OriginalL'auteur Jonathan Leffler
Cela a fonctionné pour moi:
Utilisation
Console résultat :
ÉTAPES et NOM_RÉFÉRENTIEL sont prêts à l'utiliser dans le script.
Il n'a pas d'importance quel ordre les arguments sont dans.
HTH
OriginalL'auteur JRichardsz
Vous dit que vous êtes à l'aide de tcsh. Pour la Bourne à base de coquilles, vous pouvez tomber le "env", bien qu'il est inoffensif pour l'y laisser. Notez que cela s'applique à la coquille à partir duquel vous exécutez la commande, pas pour le shell utilisé pour mettre en œuvre
myscript
.Si vous souhaitez les paires nom=valeur à suivre du nom de la commande, vous aurez besoin de faire un peu de travail à l'intérieur de
myscript
.OriginalL'auteur Keith Thompson
S'étendant sur la réponse de Jonathan, cela fonctionnait bien pour moi:
OriginalL'auteur Xavier