我在Linux Mint中運行一個shell腳本,它調用一些進程花費幾分鐘的時間。 對於每一個過程中,我想回應類似這樣的消息:顯示運行bash腳本的每秒運行時間
echo "Cleaning temporary files... X seconds."
myprocess
,其中X是當前經過的時間,我想它改變每一秒,但不能打印新的生產線。
有沒有很好的方法來做到這一點?我只找到了打印總時間的方法,但不是運行流程的時間。
我在Linux Mint中運行一個shell腳本,它調用一些進程花費幾分鐘的時間。 對於每一個過程中,我想回應類似這樣的消息:顯示運行bash腳本的每秒運行時間
echo "Cleaning temporary files... X seconds."
myprocess
,其中X是當前經過的時間,我想它改變每一秒,但不能打印新的生產線。
有沒有很好的方法來做到這一點?我只找到了打印總時間的方法,但不是運行流程的時間。
使用此在腳本的開始,這造成其在後臺運行,並不斷更新狀態的子進程。
file=$(mktemp)
progress() {
pc=0;
while [ -e $file ]
do
echo -ne "$pc sec\033[0K\r"
sleep 1
((pc++))
done
}
progress &
#Do all the necessary staff
#now when everything is done
rm -f $file
你可以用時間運行命令:
time <command>
,然後用sed/awk來exctract經過的時間。
您必須在後臺運行進程&
,否則腳本的其餘部分將一直等到完成。使用backspaces覆蓋您的當前行,所以請確保您不使用換行符。
所以,做你想做的:
myproc &
myPid=$! # save process id
tmp=""
while true; do
if kill -0 "$myPid"; then # if the process accepts a signal, keep waiting
for i in {0..${#tmp}..1}; do
printf "%b" "\b" # print backspaces until we have cleared the previous line
done
tmp=$(printf "Cleaning temp files... %t seconds.")
printf "%s" "$tmp"
else
break # drop out of the while loop
fi
sleep 1
done
這已經很不錯了。爲什麼不使用回車,\ r呢?爲了說明不同的文本長度,你可以打印一些額外的空格。它更乾淨。你也忘了睡在你的循環中。 – ypnos
@ypnos我保持我的字符串,所以我可以得到所有的長度和退格,不需要額外的空格。我相信'\ r'與'\ n'有相同的問題,但是如果他感興趣,他可以測試它。感謝您注意失蹤的睡眠。 –
這裏是一個辦法,讓awk打印STDERR每秒。 你應該只需要添加:
環部分(不終止測試......如此「無限循環」,直到CTRL-C)是:
ping 127.0.0.1 | awk '
BEGIN{cmd="date +%s"; cmd|getline startup ; close (cmd) }
/bytes from/ { cmd | getline D ; close (cmd) ;
print D-startup | "cat >&2" }'
現在你只需要使用的「printf」和ANSI轉義序列,不換行打印,H AVE的ANSI-逃生回去,直到號碼的開頭,並刷新通過調用系統輸出(所有描述符):
ping 127.0.0.1 | awk -v getback4char="$(printf '\033[4D')" '
BEGIN{cmd="date +%s"; cmd|getline startup ; close (cmd) ; printf "Elapsed time: ";}
/bytes from/ { cmd | getline D ; close (cmd) ;
printf "%4d%s" ,(D-startup) , getback4char | "cat >&2"
system("") }'
注:這是所有版本的awk,我知道的,甚至是古老兼容(也就是說,不是gawk/nawk,而是古老的awk。)
對於printf上的錯字感到抱歉,現在它再次運行(並顯示「已用時間」) –
時間很重要,還是僅僅是某種進步? – mouviciel
@mouviciel它會幫助我控制每個進程運行多少時間。 – rafa
看看這個答案:[如何創建一個秒錶Bash腳本來不斷顯示已用時間?](http://stackoverflow.com/a/10244193/98117)。 – hammar