2017-01-22 94 views
0

我想從bash命令讀取當前輸出行。 我知道我可以用cmd | tail -1得到這個,但是我想把它作爲一個獨立的命令(tint2可執行文件)作爲一種進度表來運行。讀取bash命令輸出的最後一行

例如:

我有一個輸出Downloaded x out of y因爲它下載圖像的Python程序,而我想要得到的輸出作爲一個shell變量。

或者:

也許我跑pacman -Syy,我想

extra 420.6 KiB 139K/s 00:09 [#####-----------------] 24%

這可能嗎?

編輯:某些東西在終端中運行。我想要一個命令輸出上一個終端的命令的最後一個輸出,也許輸入一個pid。

+0

您可以將命令的輸出分配給一個變量:'VAR = $(CMD |尾-1) ' – codeforester

+0

@codeforester我想運行一個單獨的命令 – Robert

+1

如果你不想重新編譯,有['pv'](http://man7.org/linux/man-pages/man1/pv.1.html) - 發動輪子。 –

回答

2

您可以使用tee將事情寫入終端和某些日誌文件。
比方說你的Python程序看起來像這樣

function mypython { 
    for i in 10 30 40 50 80 90 120 150 160 180 190 200; do 
     ((progress = (100 * i + 50)/200)) 
     printf "extra xx Kb, total %-3d of 200 (%d %%)\n" $i ${progress} 
     sleep 1 
    done 
} 

您可以重定向或tee輸出到一個tmp文件: (mypython> /tmp/robert.out)& 或 (mypython |發球的/ tmp /robert.out)&

在另一個窗口中,你可以得到的最後一行與 尾-1 /tmp/robert.out

如果你只想看一個進展,你可能想要得到最後一行來覆蓋前一行。

mypython | while read -r line; do 
    printf "Progress of mypython: %s\r" "${line}" 
done 

如果這是你想要什麼,你可能想改變你的Python程序

printf "...\r" ...