Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux BASH在相同的2行上打印2个字符串_Linux_Bash - Fatal编程技术网

Linux BASH在相同的2行上打印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' 但是现在我试着做同样的事情,但是有两行,到目前为止我尝试的一切都失败了 在

我是BASH的新手,我想知道如何在同一行上打印两个字符串

我想做的是在BASH中创建一个2行进度条。 创建一行进度条相当简单,我是这样做的:

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”副本中,它只覆盖单行进度条。