Индикатор выполнения в bash (с фиксированной длиной)

Я пытаюсь написать скрипт, который анализирует файл [output.txt], каждая строка имеет или , и сценарий будет циклически повторять каждую запись в файле и отображать#если1, и если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"
  • Я хотел бы, чтобы длина полосы была фиксированной и основывалась на количестве строк (если строка еще не проанализирована, она покажет a ), ожидая получить:
            ###..##...---------
    
  • The \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"
    

0 ответов

Другие вопросы по тегам