2015-12-29 34 views

回答

3

因爲你不能後臺函數,據我所知,你要麼必須從工作函數做微調或在子外殼運行微調,並有一些方法來殺死它。

我會告訴我的團隊成員不要在他們的shell函數中放置進度指示器 - 它會將輸出與大量回車和微調文本混淆在一起,但其價值遠遠低於日誌記錄。它也傾向於打破對shell程序的合理期望 - 當它們執行時,它們可以訪問標準輸出和錯誤。有一個原因,spinners不是收件箱命令行輸出的標準部分!只是我的2¢

0

我曾經創造大約有全局變量$__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

0

如果您不想更改myfunction並且您知道它會寫入日誌文件 您可以讓每次寫入日誌文件時,您的旋轉函數都會執行一個操作。
或者您可以在循環(帶睡眠)中調用ps,直到完成myfunction

相關問題