Bash 中的进度条(固定长度)

Bash 中的进度条(固定长度)

我正在尝试编写一个脚本来解析文件 [ output.txt],每行都有一个01,并且脚本将循环文件中的每个条目并显示#if1.if 0,它与下面的代码一起工作,输出进度如下###..##.....##.#.#.

#!/bin/bash

entries=`cat input.txt | wc -l`
currentbar=""
while read line; do
  if [[ "$line" == "1" ]];  then
    let "parse_resp++"
    reqstatus="#"
    bar="$currentbar$reqstatus"
    currentbar=$bar
    echo -ne "$bar\r"
    sleep 0.1
  else
    let "parse_resp++"
    reqstatus="."
    bar="$currentbar$reqstatus"
    currentbar=$bar
    echo -ne "$bar\r"
    sleep 0.1
  fi
done < input.txt
echo -ne "\n"
  • 我希望条形的长度是固定的,并且基于行数(如果该行尚未解析,它将显示-),期望得到:
    ###..##...---------
    
  • 下面的代码\r似乎无法在当前行顶部写入,因为它输出:(
    我尝试更改-.但它有同样的问题)
    #-----------------#----------------#---------------.--------------.-------------#------------#-----------.----------.---------.--------.-------.------#-----#----.---#--.-#.
    
    #!/bin/bash
    
    entries=`cat input.txt | wc -l`
    currentbar=""
    echo ""
    
    while read line; do
      if [[ "$line" == "1" ]];  then
        let "parse_resp++"
        nbleft=`echo "$entries - $parse_resp" | bc`
        dashleft=`seq -s- $nbleft|tr -d '[:digit:]'`
        reqstatus="#"
        bar="$currentbar$reqstatus$dashleft"
        currentbar=$bar
        echo -ne "$bar\r"
      else
        let "parse_resp++"
        nbleft=`echo "$entries - $parse_resp" | bc`
        dashleft=`seq -s- $nbleft|tr -d '[:digit:]'`
        reqstatus="."
        bar="$currentbar$reqstatus$dashleft"
        currentbar=$bar
        echo -ne "$bar\r"
      fi
    done < input.txt
    echo -ne "\n"
    

答案1

工作\r正常,但你正在存储整个老酒吧包括$currentbar$dashleft – 并且你只需在每次迭代中继续附加。

您或许应该使用currentbar+=$reqstatus

相关内容