Pipe

pv 不列印到管道

  • September 23, 2021

執行此命令會​​在控制台上顯示輸出。但是,當輸出通過管道傳送到另一個命令時,它就不起作用了。見下文。

(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) 
0:00:01 [25.2MiB/s] ETA 0:00:18
0:00:02 [23.7MiB/s] ETA 0:00:18
0:00:03 [ 100MiB/s] ETA 0:00:07
0:00:04 [ 199MiB/s] ETA 0:00:01

現在看到下面相同的命令輸出通過管道傳輸到另一個命令,它根本不顯示任何內容。我已將 stderr 重定向到 stdout 並將其傳遞給 tr -d 以便它可以刪除“:

$$ $$“ 人物。

(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) 2>&1 | tr -d ':[]'

見下文,相同的命令,但我沒有將 stderr 重定向到 stdout,另外,如果我不使用上面相同的命令將 stderr 重定向到 stdout,我不會得到想要的結果,見下文,使用 tr -d 刪除以下人物 ”:

$$ $$" 但不起作用。您可以看到 tr -d 命令被完全忽略。

(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) | tr -d ':[]'
0:00:01 [25.2MiB/s] ETA 0:00:18
0:00:02 [23.7MiB/s] ETA 0:00:18
0:00:03 [ 100MiB/s] ETA 0:00:07
0:00:04 [ 199MiB/s] ETA 0:00:01

我花了無數個小時來解決這個問題,在 stackexchange 和所有論壇上進行搜尋,但我無法理解如何解決這個問題。

我也嘗試過使用文件描述符 2>&3 但仍然沒有運氣。

利用pv -f …

來自man 1 pv

-f,--force

強制輸出。通常,pv如果標準錯誤不是終端,則不會輸出任何視覺顯示。此選項強制它這樣做。

(pv -fF $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) 2>&1 | tr -d ':[]'

引用自:https://unix.stackexchange.com/questions/670261