假设我有一个工作旋转打印输出函数,我们将其称为
spinfunction
,然后是一个处理一堆称为 myfunction
的函数
使用 Bash 或 KSH,如何让这个微调器在
myfunction
的时间内在我的 shell 底部运行?
据我所知,由于您无法在后台运行函数,因此您要么必须从工作函数中执行微调器,要么在子 shell 中运行微调器,并有某种方法来杀死它。
我会告诉我的团队成员不要在他们的 shell 函数上放置进度指示器 - 它会用大量的回车符和旋转文本使输出变得混乱,但其价值比日志记录要少得多。 它还往往会打破对 shell 程序的合理期望——执行时它们可以访问标准输出和错误。 旋转器不是收件箱命令行输出的标准部分是有原因的! 只是我的2美分
我曾经创建了一个带有全局变量的 case 语句的函数
$__spin
,类似于:
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
完成。