7
votes

Récupération du premier argument de ligne de commande non options

J'essaie d'écrire un script shell wrapper qui met en cache des informations chaque fois qu'une commande est appelée. Il suffit de stocker le premier argument de non-option. Par exemple, dans xxx

je veux récupérer "arg1".

Comment cela peut-il être fait dans Bash?


0 commentaires

3 Réponses :


2
votes

Vous voulez probablement faire quelque chose avec getopt (regarder ici ou ici pour savoir comment utiliser).

Peut-être sauvegarder la ligne de commande entière (afin que vous puissiez la remettre à l'outil réel intact), puis traiter les arguments avec getopt , saisissez les informations dont vous avez besoin et lancez l'outil subissant.


3 commentaires

Vous vous référez au "Getopts" Bash intégré. Cependant, vous avez laissé le "s". Celui sans le "s", "getopt", désigne un exécutable autonome / bin / getopt qui a une fonctionnalité similaire, mais fonctionne très différemment.


IIRC, getopts ne gère pas les options longues, mais getopt fait.


Y a-t-il un moyen simple avec GetOpt pour obtenir spécifiquement l'arg1?



9
votes

en utilisant getOpt est probablement la voie à suivre.

Si vous vouliez voir l'argument Code balayage à BASH, la voie non getOpt est la suivante: xxx


0 commentaires

3
votes

Il n'y a aucun moyen d'enlever un argument particulier sans examiner toute la ligne de commande. La raison en est l'hypothèse sous-jacente de Bash que toute option peut apparaître dans n'importe quel ordre, sans tenir compte de la position relative sur la ligne de commande. L'autre principe est que toute option spécifiée dans les pages de l'homme en format court ou long (c'est-à-dire «-f» ou «--file») aura une utilisation valide et reconnue dans l'exécution de la commande.

Votre meilleur pari consiste à utiliser l'exemple fourni par DigitalRoss et de code une valeur pour l'instruction CASE pour chaque option valide pour la commande, ou le code de l'unique (s) que vous souhaitez faire face dans votre script et votre capture. Tout le reste avec le "*)" construit et ignorez-le s'il tombe dans ce test. L'astuce est que si une option particulière a plus d'un argument valide, vous devez savoir à l'avance si la distinction entre les arguments est la position de la position ou du modèle en fonction du contenu de l'argument. Vous devrez également utiliser la directive "Skip" afin de passer d'un argument à la suivante pour les options avec plusieurs arguments.


0 commentaires