我想在我的脚本中编写一个进度指示器函数,循环“请稍候”消息,直到调用它的任务完成。
我希望它成为一个函数,以便我可以在其他脚本中重用它。
为了实现这一点,该函数需要与其他函数松散耦合,即调用它的函数不必知道其内部代码。
这是我到目前为止所拥有的。该函数接收调用者的 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
问题是当我从另一个函数调用它时,因为函数没有 pid:
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