假設我有一個工作的微調打印輸出功能,我們會打電話給spinfunction
,然後是處理了一堆東西叫myfunction
在另一個功能的持續時間內,你將如何獲得進度條/微調器? (KSH)
使用bash或ksh的功能,我將如何得到這個微調在底部運行我的外殼持續時間爲myfunction
?
假設我有一個工作的微調打印輸出功能,我們會打電話給spinfunction
,然後是處理了一堆東西叫myfunction
在另一個功能的持續時間內,你將如何獲得進度條/微調器? (KSH)
使用bash或ksh的功能,我將如何得到這個微調在底部運行我的外殼持續時間爲myfunction
?
因爲你不能後臺函數,據我所知,你要麼必須從工作函數做微調或在子外殼運行微調,並有一些方法來殺死它。
我會告訴我的團隊成員不要在他們的shell函數中放置進度指示器 - 它會將輸出與大量回車和微調文本混淆在一起,但其價值遠遠低於日誌記錄。它也傾向於打破對shell程序的合理期望 - 當它們執行時,它們可以訪問標準輸出和錯誤。有一個原因,spinners不是收件箱命令行輸出的標準部分!只是我的2¢
我曾經創造大約有全局變量$__spin
case語句的功能,像:
spinfunction() {
case $__spin in
(1) printf "\r|"; __spin=2;;
(2) printf "\r/"; __spin=3;;
(3) printf "\r-"; __spin=4;;
(*) printf "\r\\"; __spin=1;;
esac
}
這將始終在當前的啓動 打印序列中的下一個字符線。如果你想要它在一個固定的位置,而其他 輸出正在處理中,你需要撥弄tput
和很多 麻煩。
爲了測試,附加以下並命名腳本spinner.sh
(
module=spinner
name=${0##*/}
case ${name%.sh} in
($module)
while sleep 0.2; do
spinfunction
done
;;
esac
)
運行它ksh spinner.sh
。
如果您不想更改myfunction
並且您知道它會寫入日誌文件 您可以讓每次寫入日誌文件時,您的旋轉函數都會執行一個操作。
或者您可以在循環(帶睡眠)中調用ps
,直到完成myfunction
。
*在我的外殼底部* - 我想你的意思是「在屏幕的底部」? –