
次のような「forループ」があるとします。
#!/bin/bash
for i in $(cat test_file); do
echo $i
done
テキストファイルの内容は親フォルダのフォルダ名です。
text_fileに10000個の項目(変数iなど)が含まれている場合、「forループ」が10個の「エコー」ごとに10秒間休止するように指示するにはどうすればよいですか?つまり、forループがtext_fileから変数iを読み取るときに、各特定の期間にforループが実行できる変数の数を制御する方法は何ですか?したがって、出力は次のようになります。
Variable #1
Variable #2
Variable #3
.
.
.
.
sleep 10
Variable #11
Variable #12
Variable #13
.
. .
答え1
以下を使用してください強く打つスクリプト(10回の「エコー」の間に10秒間睡眠をとります。):
test.sh
スクリプトのテスト名
#!/bin/bash
while ((++i)); read -r line
do
echo "$line"
if (( "$i" % 10 == 0))
then
sleep 10
fi
done < $1
使用法:
bash test.sh test_file
while ((++i))
- 入力から行が返されるたびにi
カウンタread -r line
をインクリメントします。
if (( "$i" % 10 == 0))
- 現在の行番号がi
分割されていることを確認します10
(実行フローが次の10行に達することを意味します)。
sleep 10
- 10秒間スクリプトを一時停止
答え2
xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file
布材
xargs
withは-L
一度に10行を読み取り、sh -c
コマンドに渡します。最初のパラメータはプログラム名として使用され、ダミー名を入力しますsh
。これにより、この10行をsh
「$ @」として使用でき、必要なものは何でもできます。ここではちょうど印刷してみましょう。その後、sleep
10秒間待ちます。その後、xargs
次の10個の部分が渡され、test_fileのすべての嘘が使い果たされるまでループが繰り返されます。