Repetir un comando de terminal

Repetir un comando de terminal

Supongamos que tengo un comando de terminal llamado foo(en realidad, esto sería algo así cdcomo lsalgo 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 repeatcon 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. repeatya es una palabra clave (que hace exactamente lo mismo) en csh, tcsh y zsh, así que con esta adición la agregarás bashy funcionará exactamente igual.

información relacionada