
假設我們有以下「for 迴圈」:
#!/bin/bash
for i in $(cat test_file); do
echo $i
done
文字檔案的內容是父資料夾中的資料夾名稱
如果text_file包含10000個條目(即變數i),我如何告訴「for循環」在每10個「echo」之間休眠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 中的謊言為止。