我对BASH很新,我想知道如何在同一条2行上打印2个字符串。
我正在尝试做的是在BASH中创建一个2行进度条。 创建1行进度条非常简单,我这样做:
echo -en 'Progress: ### - 33%\r'
echo -en 'Progress: ####### - 66%\r'
echo -en 'Progress: ############ - 100%\r'
echo -en '\n'
但是现在我正在努力做同样的事情,但有两条线,到目前为止我试过的一切都失败了。
在第二行中,我想要一个“进度细节”,它告诉我脚本在什么位置,例如:什么变量正在收集,它运行的是什么功能。但我似乎无法创建一个2行进度条。
答案 0 :(得分:1)
可以使用tput
和printf
覆盖双行,例如:
function status() {
[[ $i -lt 10 ]] && printf "\rStatus Syncing %0.0f" "$(( i * 5 ))" ;
[[ $i -gt 10 ]] && printf "\rStatus Completing %0.0f" "$(( i * 5 ))" ;
printf "%% \n" ;
}
for i in {1..20}
do status
printf "%0.s=" $(seq $i) ;
sleep .25 ; tput cuu1 ;
tput el ;
done ; printf "0%%\n" ; printf " %.0s" {1..20} ; printf "\rdone.\n"
<强>单行:强>
for i in {1..20}; do status ; printf "%0.s=" $(seq $i) ; sleep .25 ; tput cuu1 ; tput el ; done ; printf "0%%\n" ; printf " %.0s" {1..20} ; printf "\rdone.\n"
循环调用status
函数以在特定时间内显示相应的文本。
结果输出类似于:
Status Completing 70%
==============
答案 1 :(得分:0)
您可以使用\033[F
转到上一行,\033[2K
删除当前行(以防输出长度发生变化)。
这就是我做的剧本:
echo -en 'Progress: ### - 33%\r'
echo -en "\ntest" # writes progress detail
echo -en "\033[F\r" # go to previous line and set cursor to beginning
echo -en 'Progress: ####### - 66%\r'
echo -en "\n\033[2K" # new line (go to second line) and erase current line (aka the second one)
echo -en "test2" # writes progress detail
echo -en "\033[F\r" # go to previous line and set cursor to beginning
echo -en 'Progress: ############ - 100%\r'
echo -en "\n\033[2K" # new line and erase the line (because previous content was "test2", and echoing "test" doesn't erase the "2")
echo -en "test" # write progress detail
echo -en '\n'