在命令行上獲得的進度條的常用方法是使用回車符,它會覆蓋前行,在這個腳本看到:命令行的進度條
#!/bin/bash
echo -ne '[# ] 25%\r'
sleep 1
echo -ne '[## ] 50%\r'
sleep 1
echo -ne '[### ] 75%\r'
sleep 1
echo -ne '[####] 100%\r'
這是好的...如果你只有想要打印一個進度條。但是更復雜的腳本可能希望打印進度條,同時輸出診斷輸出。您希望您的命令行應用程序的緩衝區演變爲如下(分開):
[# ] 25%
----
msg1
[# ] 25%
----
msg1
msg2
[# ] 25%
----
msg1
msg2
[## ] 50%
等而現在,流行的做法失敗:
#!/bin/bash
echo -ne '[# ] 25%\r'
echo "msg 1"
sleep 1
echo "msg 2"
echo -ne '[## ] 50%\r'
echo "msg 3"
sleep 1
echo "msg 4"
echo -ne '[### ] 75%\r'
sleep 1
echo -ne '[####] 100%\r'
輸出
[email protected]:~$ ./test.sh
msg 1] 25%
msg 2
msg 3] 50%
msg 4
它會似乎要實現這一點,任何其他時間要打印一條消息,您需要:
- 檢查它是否是一個進度條,
- 如果是,清除線,打印輸出加上一個換行符,然後重新打印進度條
(或者,你可以使用的ncurses )。不幸的是,這需要所有可能的東西,可以給輸出玩球。
是否有任何模塊化的方法使這種進度條工作,這不需要將所有其他輸出方法輸出到終端?
在消息前添加換行符意味着進度消息永遠不會被擦除;我想要刪除舊的進度消息。 –
所以你想要2更新行。一個用於進步,另一個用於消息? –
不是兩條更新行;消息可以單調遞增。我很高興地認爲,只會有一條進展路線。 –