Индикатор выполнения в 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"