ターミナルコマンドを繰り返す

ターミナルコマンドを繰り返す

というターミナル コマンドがあるとします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」(bash では 0) になります。「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とまったく同じように動作します。

関連情報