2015-05-22 28 views
2

我需要一個bash腳本幫助的進步我像這樣運行:如何顯示另一個命令

do_something > file.txt(我使用這個file.txt的第三行中的另一個回聲輸出)

現在我需要在file.txt的第二行獲取多個字符。 (只有小點 - 「」)

我能得到的字符數用這個命令:

progress=$(awk 'NR==2' file.txt | grep -o \. | wc -w)

但問題是,該file.txt的和字符數在第二行是「進度條」,所以它的時間從0 - XY(即100個)字符變化。 我想用它來查看進度百分比:echo -ne "$progress % \\r"

我怎麼能在循環中做到這一點? do_something > file.txt必須啓動一次。在接下來的5-20秒內,它在第二行打印點,我必須每秒更新一次這個數字到我的輸出回聲「XY%」。

如何從file.txt的每秒讀取和發現有文字「新/更新的」數* < 編輯

編輯: *它的實時過程。我的do_something> file.txt是「打印」點到這個文件,我希望實時保存在$ progress中的打印結果。所以,第一個命令是打印點到文件,我在實時每秒和打印百分之多少是從0-100%

+0

什麼時候你想停止打印? – geckon

+0

當file.txt的第二行達到100個字符時,我將停止打印。 – pEpe

+0

查看我更新的答案(http://stackoverflow.com/a/30396366/4408382)並讓我知道它是否適合您。 – geckon

回答

1

你想要做的是在後臺運行do_something > file.txt,然後監視它。您可以使用特殊kill信號0來執行此操作。

do_something > file.txt & 
PID=$! 
while kill -0 $PID 2> /dev/null 
do 
    [calculate percent complete] 
    [display percent complete] 
    sleep 5 
done 
+0

謝謝,這個解決方案也在工作,並且在代碼中看起來很有效率。現在我明白了,我必須在後臺啓動do_something> file.txt :-)多麼簡單,謝謝。@Mort – pEpe

+0

@pEpe我認爲這足夠清楚:)我將它添加到我的答案肯定.. – geckon

1

首先進行計數他們,你應該在後臺運行的命令:

do_something > file.txt & 

然後您可以觀察輸出文件中的更改。這將無限打印每秒file.txt的第二行。如果你想停止時,有在第二行100個字符

while true; do sed -n '2p' < file.txt | wc -m; sleep 1; done 

,您:

while true; do sed -n '2p' < file.txt; sleep 1; done 

如果你只想打印多少個字符是在第二行,你可以這樣做可以這樣做:

MAX="100" 
CUR="0" 
while [ $CUR -lt $MAX ]; do CUR=`sed -n '2p' < sprint | wc -m`; echo $CUR; sleep 1; done 
+1

謝謝!我以這種形式使用它,它正在工作! ssh do_something> file.txt |而[$ CUR -lt $ MAX];做CUR ='sed -n'2p' pEpe

相關問題