Linux BASH在相同的2行上打印2个字符串
我是BASH的新手,我想知道如何在同一行上打印两个字符串 我想做的是在BASH中创建一个2行进度条。 创建一行进度条相当简单,我是这样做的:Linux BASH在相同的2行上打印2个字符串,linux,bash,Linux,Bash,我是BASH的新手,我想知道如何在同一行上打印两个字符串 我想做的是在BASH中创建一个2行进度条。 创建一行进度条相当简单,我是这样做的: echo -en 'Progress: ### - 33%\r' echo -en 'Progress: ####### - 66%\r' echo -en 'Progress: ############ - 100%\r' echo -en '\n' 但是现在我试着做同样的事情,但是有两行,到目前为止我尝试的一切都失败了 在
echo -en 'Progress: ### - 33%\r'
echo -en 'Progress: ####### - 66%\r'
echo -en 'Progress: ############ - 100%\r'
echo -en '\n'
但是现在我试着做同样的事情,但是有两行,到目前为止我尝试的一切都失败了
在第二行中,我想放一个“进度细节”,告诉我它在脚本中的什么位置,例如:什么变量正在收集,它在运行什么函数。但我似乎无法创建两行进度条。您可以使用
\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'
可以使用
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%
==============
对不起,伙计,但我认为你不能这么做。但是为什么不考虑把这个进展放在同一行的“djm NO”副本中,它只覆盖单行进度条。