假设我有一个有效的微调器打印输出功能,我们将调用spinfunction
,然后处理一组称为myfunction
使用Bash或KSH,如何在myfunction
的持续时间内让这个微调器在shell的底部运行?
答案 0 :(得分:3)
因为据我所知你不能使用后台函数,你要么必须从工作函数中执行微调器,要么在子shell中运行微调器并有一些方法来杀死它。
我告诉我的团队成员不要在他们的shell函数上放置进度指示器 - 它会使输出带有大量回车和微调文本,但其价值远远低于记录。它也倾向于破坏对shell程序的合理期望 - 在执行时它们可以访问标准输出和错误。旋转器不是收件箱命令行输出的标准部分是有原因的!只是我2¢
答案 1 :(得分: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
运行它。
答案 2 :(得分:0)
如果您不想更改myfunction
并且您知道它写入日志文件,
每次将某些内容写入日志文件时,您都可以让您的spinfunction进行操作
或者你可以在一个循环(带睡眠)中调用ps
,直到myfunction
完成。