J'ai un programme pas vraiment permissif avec lequel travailler. Malheureusement, ce programme ne permet pas seulement ce qui suit
"command -a -b -c"
ou
"command -abc"
Je dois donc toujours taper ce qui suit
command -a && command -b && command -c
Je suis sûr qu'il existe un moyen plus efficace de taper cela, mais je ne peux pas le comprendre.
command-line
Douda
la source
la source
cmd -a; cmd -b; cmd -c
long terme, comme tous les êtres humains.command
. Dans le cas généralcommand -a -b -c
,command -abc
etcommand -a && command -b && command -c
ont une signification différente ..Réponses:
Vous pourriez faire:
Ou:
avec quelques coquilles.
Mais attention, cela affecte le stdin de
command
.Avec
zsh
:Ou simplement:
Aucun de ceux-ci ne serait abandonné si l'une des
command
invocations échouait (sauf si elle échoue avec l'état de sortie 255).Pour cela, vous voudriez:
Cela ne parvient toujours pas à l'
$?
état de sortie de l'command
appel échoué ). Vous pouvez changer cela en:Mais à ce moment-là, c'est déjà plus long que:
la source
Vous pouvez vous référer au premier mot de la ligne de commande précédente (
command
dans votre cas) par expansion de l'historique!!:0
, puis vous pouvez simplement y ajouter les arguments nécessaires.Par exemple:
Notez que, comme l' a souligné Stéphane Chazelas , cela peut également entraîner des extensions inattendues.
la source
!!:0
(dans les shells qui prennent en charge l'expansion de l'historique csh) s'étendra au premier mot de la ligne de commande précédente , et non à la commande précédente.uname
, puisecho foobar && !!:0 spamegg && !!:0 baz
cela se développeraecho foobar && uname spamegg && uname baz
.!
suffit:!:0
mais avec @ StéphaneChazelas, les points sont mieux utilisés!#:0
là où la!#
moyenne La ligne de commande entière a été tapée jusqu'à présent .Que diriez-vous d'une fonction shell enveloppant une boucle?
Où "chose" est la commande réelle que vous souhaitez invoquer. Alors simplement
Vous pouvez même généraliser cela à n'importe quelle commande:
alors
la source
Au milieu des réponses créatives et perspicaces, voici quelque chose de simple au nom de taper moins de caractères:
la source
Créez un script shell MultiRun , qui prend le premier paramètre comme commande et l'exécute avec les paramètres restants un par un.
./ MultiRun curl ABCD
Votre script doit prendre curl comme commande et exécuter "curl A", "curl B", "curl C", "curl D". Maintenant, parce que votre script est sous contrôle, vous pouvez décider si un échec dans l'une des commandes mettra fin au script ou continuera au paramètre suivant ou attendra l'entrée de l'utilisateur ou autre. Vous pouvez même décider de l'état de sortie de l'ensemble du script, en fonction de l'exécution des commandes individuelles.
Le script MultiRun peut ressembler à ceci:
Exécutez maintenant ceci: ./MultiRun echo 1 2 3 4
pour obtenir la sortie de "echo 1", "echo 2", "echo 3", "echo 4" comme ceci:
1
2
3
4
C'est une solution très flexible et réutilisable.
la source