我想在我的腳本中編寫一個循環「請稍候」消息的進度指示器函數,直到完成調用它的任務。如何在shell腳本中顯示進度指示器功能?
我希望它是一個函數,以便我可以在其他腳本中重用它。
爲了達到這個目的,函數需要與其他函數鬆散耦合,即調用它的函數不需要知道它的內部代碼。
這是我到目前爲止。這個函數接收調用者的pid並循環,直到任務完成。
function progress() {
pid="$1"
kill -n 0 "${pid}" &> /dev/null && echo -ne "please wait"
while kill -n 0 "${pid}" &> /dev/null ; do
echo -n "."
sleep 1
done
}
,當你在腳本中使用它,比如它工作正常:
#imports the shell script with the progress() function
. /path/to/progress.sh
echo "testing"
# $$ returns the pid of the script.
progress $$ &
sleep 5
echo "done"
輸出:
$ testing
$ please wait.....
$ done
問題是,當我把它從另一個函數,函數沒有pids:
function my_func() {
progress $$ &
echo "my func is done"
}
. /path/to/progress.sh
echo "testing"
my_func
sleep 10
echo done
輸出:
$ testing
$ please wait.....
$ my func. is done.
$ ..........
$ done
這與我以前的嘗試很接近,但我試圖避免在我的progress()函數之外殺死它......也許這不能用shell腳本來完成。謝謝! – Tarek
嗨,我已經試過提供的代碼,但它遭受同樣的問題,因爲程序完成時發送SIGTERM。除非我明確發送kill信號,否則我不能在函數內部使用它。 – Tarek
@Tarek真的不明白你的意思是「在函數內部」和「除非發送殺手」......但是:我編輯了腳本以顯示如何在一個函數內使用它,對於第二個,當然你__need__發送信號 - 你必須告訴後臺進程:「立即停止」...。如果你的意思是其他的 - 不能幫助... – jm666