如何让进度条/旋转器在另一个函数的持续时间内持续运行? (KSH)

问题描述 投票:0回答:4

假设我有一个工作旋转打印输出函数,我们将其称为

spinfunction
,然后是一个处理一堆称为
myfunction

的函数

使用 Bash 或 KSH,如何让这个微调器在

myfunction
的时间内在我的 shell 底部运行?

function spinner wait ksh progress
4个回答
3
投票

据我所知,由于您无法在后台运行函数,因此您要么必须从工作函数中执行微调器,要么在子 shell 中运行微调器,并有某种方法来杀死它。

我会告诉我的团队成员不要在他们的 shell 函数上放置进度指示器 - 它会用大量的回车符和旋转文本使输出变得混乱,但其价值比日志记录要少得多。 它还往往会打破对 shell 程序的合理期望——执行时它们可以访问标准输出和错误。 旋转器不是收件箱命令行输出的标准部分是有原因的! 只是我的2美分


0
投票

我曾经创建了一个带有全局变量的 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
运行它。


0
投票

当您不想更改

myfunction
并且您知道它会写入日志文件时, 每次向日志文件写入内容时,您都可以让自旋函数执行一个操作。
或者您可以循环调用
ps
(睡眠),直到
myfunction
完成。


0
投票

https://github.com/kattouf/ProgressLine

我制作了一个实用程序,可以紧凑地跟踪几乎任何命令或脚本的执行进度(持续时间),也许它对您有用。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.