Tengo un programa realmente no permisivo para trabajar. Desafortunadamente, este programa no solo permite lo siguiente
"command -a -b -c"
o
"command -abc"
Así que siempre tengo que escribir lo siguiente
command -a && command -b && command -c
Estoy bastante seguro de que hay una forma más eficiente de escribir eso, pero no puedo entenderlo.
command-line
Douda
fuente
fuente
cmd -a; cmd -b; cmd -c
largo plazo, como lo hacen todos los seres humanos.command
. En generalcommand -a -b -c
,command -abc
ycommand -a && command -b && command -c
tienen un significado diferente ..Respuestas:
Podrías hacerlo:
O:
Con algunas conchas.
Pero cuidado con que afecta el stdin de
command
.Con
zsh
:O simplemente:
Ninguno de esos abortaría si
command
fallara alguna de las invocaciones (excepto si falla con el estado de salida 255).Para eso, querrás:
Eso todavía falla al
$?
estado de salida de lacommand
invocación fallida ). Podrías cambiar eso a:Pero para ese momento, ya es más largo que:
fuente
Puede referirse a la primera palabra de la línea de comando anterior (
command
en su caso) por expansión de historial!!:0
y luego simplemente puede agregarle los argumentos necesarios.Por ejemplo:
Tenga en cuenta que, como ha señalado Stéphane Chazelas , esto también puede dar lugar a expansiones inesperadas.
fuente
!!:0
(en shells que admiten la expansión del historial de csh) se expandirá a la primera palabra de la línea de comando anterior , no al comando anterior.uname
y luegoecho foobar && !!:0 spamegg && !!:0 baz
, eso se expandirá aecho foobar && uname spamegg && uname baz
.!
es suficiente:!:0
pero con los puntos de @ StéphaneChazelas, es mejor usar!#:0
donde la!#
media La línea de comando completa escrita hasta ahora .¿Qué tal una función de shell envolviendo un bucle?
Donde "cosa" es el comando real que desea invocar. Entonces simplemente
Incluso puede generalizar esto a cualquier comando:
Entonces
fuente
En medio de las respuestas creativas y perspicaces, aquí hay algo simple en el nombre de escribir menos caracteres:
fuente
Haga una secuencia de comandos de shell MultiRun , que toma el primer parámetro como comando y lo ejecuta con los parámetros restantes uno por uno.
./ MultiRun curl ABCD
Su script debe tomar curl como comando y ejecutar "curl A", "curl B", "curl C", "curl D". Ahora, debido a que su script está en control, puede decidir si una falla en cualquiera de los comandos terminará el script o continuará con el siguiente parámetro o esperará la entrada del usuario o lo que sea. Incluso puede decidir el estado de salida de todo el script, en función de la ejecución de los comandos individuales.
MultiRun Script puede ser algo como esto:
Ahora ejecute esto:
./MultiRun echo 1 2 3 4
para obtener la salida de "echo 1", "echo 2", "echo 3", "echo 4" de esta manera:
1
2
3
4
Es una solución muy flexible y reutilizable.
fuente