Supongamos que tengo un comando de terminal llamado foo
(en realidad, esto sería algo así cd
como ls
algo más complicado. ¿Hay alguna manera de poder ejecutar este comando varias veces SIN el uso de un script?
Por ejemplo, quiero hacer el equivalente a lo siguiente:
foo && foo && foo && foo && foo
¿Hay alguna manera de que pueda hacer algo similar a
foo * 5
o tal vez
5:foo
Estoy usando una máquina Linux.
Respuesta1
Agregue una semicoma a la respuesta del blogger para que sea de una sola línea:
for variables in {1 2 3 4 5}; do ls; done
Respuesta2
El blogger tiene razón. sin embargo, es importante tener en cuenta la sintaxis exactamente: si estás usando un shell interactivo (por ejemplo, la terminal)
echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done
el "$?" devuelve el estado de la llamada a función anterior; debido a que primero llamamos "echo", la primera iteración del bucle será "verdadera" (0 en bash). "fi" cierra la declaración "if" y los puntos y comas son necesarios.
Esto es lo mismo si estuvieras escribiendo un script bash:
#!/bin/bash
echo -n
para i en {1..5}; hacer
si [[ $? ]]; entonces
foo
fi
hecho
notarás que foo no tiene punto y coma después; al escribir un script bash completo en un entorno donde hay saltos de línea disponibles (por ejemplo, su editor de texto favorito), los saltos de línea hacen lo mismo que el punto y coma :)
Además, tenga en cuenta que en su lugar podría utilizar
[[ $? ]] && foo
en lugar de la declaración if; tenga en cuenta que && significa que foo solo se ejecutará si el foo anterior no tuvo un error. es decir, en la llamada a la función
thing1 && thing2
thing2 solo se ejecutará si thing1 funciona bien (técnicamente, si devuelve un valor 0) para ignorar si foo está funcionando o no, use punto y coma en lugar de &&
Respuesta3
Puedes probar algo como:
for i in {1..10}; do YourCommand; done
Ejemplo:
for i in {1..5}; do ls -l; done
Respuesta4
Encontré un gran métodoaquí.
Sé que sigue siendo "una especie de script", pero creo que es lo más cercano que puedes llegar sin escribir una línea de comando completa con comandos.
Puedes crear el comando repeat
con el que puedes hacer esto:
repeat 5 ./foo
Agregue las siguientes líneas al final de su ~/.bashrc
(si está usando bash):
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
y la próxima vez que inicies sesión (o inicies bash) podrás usar repeat 5 ./foo
.
Por cierto. repeat
ya es una palabra clave (que hace exactamente lo mismo) en csh, tcsh y zsh, así que con esta adición la agregarás bash
y funcionará exactamente igual.