Je sais que je peux exécuter la commande suivante
ls Some{File,Folder}
Et cela revient à exécuter ceci:
ls SomeFile SomeFolder
(Je l'utilise aussi beaucoup pour des choses comme mv place_{a,b}
)
Cependant, je me demandais s'il y avait un raccourci différent où je pouvais faire quelque chose comme ça:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
Et je n'avais qu'à taper run-command --a --whole --lot --of --flags parameter {a,b}
ou quelque chose de similaire.
shell
command-line
scripting
ashays
la source
la source
run-command
, de nombreuses commandes Unix gèrent plusieurs arguments de fichier en séquence.Réponses:
En supposant que vous utilisez GNU
bash
ou quelque chose de similaire:Peut-être une
for
boucle?qui peut également être écrit sur une ligne comme
for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done
la source
for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
{a..z}
,*.pdf
,$(find ...)
...;
ledo
mot - clé suivant.;
.Si vous n'écrivez pas ceci et que vous voulez simplement l'exécuter facilement sur une ligne de commande, la
xargs
commande est probablement ce que vous recherchez.xargs prendra un tas de contenu de l'entrée standard et l'utilisera comme arguments pour une commande, exécutant cette commande plusieurs fois si nécessaire.
Essayez ce qui suit:
Dans cet exemple, vous donnez simplement à xargs les permutations que vous souhaitez qu'il exécute.
L'indicateur "-n 1" pour indiquer à xargs d'utiliser uniquement 1 des arguments par exécution.
L'indicateur "-d," indique à xargs de rechercher un "," sur l'entrée comme séparateur entre les arguments à exécuter. (Notez que si l'argument contient un "," vous devrez le changer en quelque chose d'autre. Si vos arguments n'ont pas d'espace, vous pouvez omettre complètement cet indicateur.)
Voir
man xargs
pour plus d'informations.la source
Vous pouvez également utiliser une fonction, ce qui ne vous limite pas à avoir votre argument changeant à la fin:
la source
Vous pouvez effectuer des substitutions dans la commande précédente. Cela ne fonctionnera pas avec votre exemple {a, b}, car toutes les instances de 'a' seront remplacées par un 'b'. Mais imaginez que vous souhaitez exécuter les commandes suivantes:
Vous pouvez le faire avec
Bash fera la substitution et courra
Utilisez gs (substitution globale) pour effectuer plusieurs substitutions, pas une seule.
la source
Il y a une
alias
commande dans bash:L'utilisation est:
$ shotcommand a
la source