9
votes

Spécifiez les arguments de ligne de commande comme Nom = paires de valeur pour script shell

est-il possible de passer des arguments de ligne de commande au script shell en tant que paires de valeur de nom, quelque chose comme xxx

, puis dans mon script, obtenez la variable comme $ Action et le processus?

Je sais que 1 $ .... Et ainsi de suite peut être utilisé pour obtenir des variables, mais ne sera pas une valeur de nom comme des paires. Même s'ils le sont, le développeur utilisant le script devra s'occuper de la déclaration de variables dans le même ordre. Je ne veux pas ça.


3 commentaires

Je pense que votre réponse est ici: Stackoverflow.com/questions/2642707/...


Oui, par opposition à la Bash Bashetin getopts , getopt fonctionne avec tculsh.


Je suppose que quelque chose comme ça est disponible uniquement pour Bash.Sorry, je n'ai pas spécifié, im utilisant tculsh.


5 Réponses :


4
votes

dans la coquille de Bourne, il existe une option rarement utilisée ' -k code>' qui place automatiquement toutes les valeurs spécifiées sous forme nom = valeur code> sur la ligne de commande dans l'environnement. . Bien sûr, la famille Bourne / Korn / Posix Shell (y compris Bash), faites aussi cela pour nom = valeur code> avant le nom de la commande:

arg=name1=value1
echo $name1
eval $arg
echo $name1


3 commentaires

J'ai essayé de trouver des informations pour passer des variables environnementales à des commandes telles que la commande nom = valeur . Cependant, je ne trouve aucune explication dans homme bash . Y a-t-il une page d'homme en documentant cela?


Je viens de le trouver dans Man Bash : L'environnement pour une simple commande ou une fonction simple peut être augmenté temporairement en le préfixant avec des affectations de paramètres, comme décrit ci-dessus dans les paramètres. Ces déclarations d'affectation affectent uniquement l'environnement observé par cette commande.


Plusieurs sections du manuel Bash discutent de l'environnement avant le nom de la commande. On est Extension de la commande simple . Une autre est la section sur environnement et qui fournit des pointeurs à < code> -k via L'ensemble construit -in .



1
votes
env action=build module=core myscript
You said you're using tcsh.  For Bourne-based shells, you can drop the "env", though it's harmless to leave it there.  Note that this applies to the shell from which you run the command, not to the shell used to implement myscript.If you specifically want the name=value pairs to follow the command name, you'll need to do some work inside myscript.

0 commentaires

0
votes

s'étendant sur la réponse de Jonathan, cela a fonctionné bien pour moi: xxx


0 commentaires

12
votes

Ceci a fonctionné pour moi:

STEPS = ABC
REPOSITORY_NAME = stackexchange


2 commentaires

Merci. Y a-t-il un équivalent de fenêtres pour les scripts de lot?


Théoriquement, vous pouvez reproduire ce script dans Windows en utilisant ses propres commandes. Voici quelques liens avec des chauves-souris complexes Windows si vous avez besoin: - github.com/krichter722/squirrel-sql/blob/master/archive/... - github.com/apache/tomcat/tree/master/bin



1
votes

C'est une vieille question, mais toujours valable Je n'ai pas trouvé la solution Cookie Cut. J'ai combiné les réponses ci-dessus. Pour mes besoins, j'ai créé cette solution; Cela fonctionne même avec blanc espace code> dans la valeur de l'argument.

enregistrer ceci comme argpars.sh code> p> xxx pré>

@ Exemple: Remarque, les arguments au script peuvent avoir un préfixe optionnel - code> p> xxx pré>

quelques cas d'utilisation intéressante pour ce script: p>

./argparse.sh --path="$(ls -1)"
./argparse.sh --path="$(ls -d -1 "$PWD"/**)"


0 commentaires