Повторите команду терминала

Повторите команду терминала

Предположим, у меня есть терминальная команда, называемая foo(на самом деле это было бы что-то вроде cdили lsили что-то более сложное). Есть ли способ, которым я могу выполнить эту команду много раз БЕЗ использования скрипта.

Например, я хочу сделать что-то похожее на следующее:

foo && foo && foo && foo && foo

Есть ли способ, которым я могу сделать что-то в этом роде?

foo * 5 

или, может быть

5:foo

Я использую машину с Linux.

решение1

Добавьте несколько запятых в ответ блогера, чтобы сделать его однострочным:

for variables in {1 2 3 4 5};  do ls; done

решение2

Blogger прав. Однако важно точно соблюдать синтаксис: если вы используете интерактивную оболочку (например, терминал)

echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done

«$?» возвращает статус предыдущего вызова функции; поскольку мы сначала вызываем «echo», первая итерация цикла будет «true» (0 в bash). «fi» закрывает оператор «if», и точки с запятой необходимы.

Вот то же самое, если бы вы писали bash-скрипт:

#!/bin/bash
echo -n
for i in {1..5}; do
if [[ $? ]]; then
foo
fi
done

вы заметите, что после foo не стоит точка с запятой; при написании полноценного bash-скрипта в среде, где доступны переносы строк (например, в вашем любимом текстовом редакторе), переносы строк выполняют ту же функцию, что и точки с запятой :)

также обратите внимание, что вместо этого вы могли бы использовать

[[ $? ]] && foo

вместо оператора if; поймите, что && означает, что foo будет выполнен только в том случае, если предыдущий foo не содержал ошибки. т.е. в вызове функции

thing1 && thing2

thing2 будет выполнен только в том случае, если thing1 работает нормально (технически, если он возвращает значение 0), чтобы игнорировать, работает foo или нет, используйте точку с запятой вместо &&

решение3

Вы можете попробовать что-то вроде:

for i in {1..10}; do YourCommand; done

Пример:

for i in {1..5}; do ls -l; done

решение4

Я нашел отличный методздесь.

Я знаю, что это все еще «своего рода скрипт», но я думаю, что это самое близкое, что можно получить, не набирая целую командную строку с командами.

Вы можете создать команду, repeatс помощью которой это можно сделать:

 repeat 5 ./foo

Добавьте следующие строки в конец вашего файла ~/.bashrc(если вы используете bash):

repeat() {
    n=$1
    shift
    while [ $(( n -= 1 )) -ge 0 ]
    do
        "$@"
    done
}

и в следующий раз, когда вы войдете в систему (или запустите bash), вы сможете использовать repeat 5 ./foo.

Кстати, repeatэто уже ключевое слово (которое делает то же самое) в csh, tcsh и zsh, так что с этим дополнением вы добавите его, bashи оно будет работать точно так же.

Связанный контент