Bash script, стереть предыдущую строку?
Во многих программах Linux, таких как curl, wget и что-либо с индикатором прогресса, они постоянно обновляют нижнюю строку, каждый определенный промежуток времени. Как это сделать в bash script? Все, что я могу сделать сейчас, это просто эхо-новая линия, и это не то, что я хочу, потому что она накапливается. Я натолкнулся на что-то, что упоминало "tput cup 0 0", но я попробовал, и это было изворотливым. Какой лучший способ?
Ответы
Ответ 1
{
for pc in $(seq 1 100); do
echo -ne "$pc%\033[0K\r"
usleep 100000
done
echo
}
"\ 033 [0K" будет удаляться до конца строки - в случае, если ваша контрольная строка в какой-то момент становится короче, хотя это может быть и не для ваших целей.
"\ r" переместит курсор в начало текущей строки
-n on echo предотвратит переход курсора к следующей строке
Ответ 2
Небольшая вариация на примере кода linuts для перемещения курсора не к началу, а к концу текущей строки.
{
for pc in {1..100}; do
#echo -ne "$pc%\033[0K\r"
echo -ne "\r\033[0K${pc}%"
sleep 1
done
echo
}
Ответ 3
printf '\r'
, как правило. В этом случае нет причин для адресации курсора.
Ответ 4
Вы также можете использовать tput cuu1;tput el
(или printf '\e[A\e[K'
), чтобы переместить курсор на одну строку и стереть строку:
for i in {1..100};do echo $i;sleep 1;tput cuu1;tput el;done
Ответ 5
echo -n "foo"
также печатает его без новой строки в конце.