
というターミナル コマンドがあるとします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
とまったく同じように動作します。