Linux Bash 正在尝试编写清单进度 "bar" 之类的。替换同一行

Linux Bash Trying to write checklist progress "bar" of sorts. Replace the same line

对不起,如果我没有给你足够的信息,这是我第一次在这里发帖。

我正在尝试在 bash 脚本中制作它。

Downloading...............

"运行 bash 命令,完成后,将“正在下载...”文本替换为下面的文本 在同一行中又名 space.

Downloading............... DONE!

转到下一行并显示

Installing................

"运行 bash 再次执行命令,完成后,在同一行中将“正在安装...”文本替换为下面的文本 即 space."

Installing................ DONE!

希望您明白我的意思。提前致谢。

我试过:

#/bin/bash
tput sc # save cursor
printf "Something that I made up for this string"
sleep 1
tput rc;tput el # rc = restore cursor, el = erase to end of line
printf "Another message for testing"
sleep 1
tput rc;tput el
printf "Yet another one"
sleep 1
tput rc;tput el

但它不会换行,它只是用一行来显示所有文本。

我假设你从某个地方提取了 tput 代码,我猜 'somewhere' 也解释了 tput 被用来多次覆盖同一行(正如您的脚本实际所做的那样)。

根据您的描述,您似乎不需要覆盖任何行,因此使用 tput 是错误的解决方案。

如果我正确理解你的描述,你应该能够用一些(相对)简单的 printf 命令做你想做的一切,例如:

printf "Downloading .... "                 # no '\n' in the output so cursor remains at end of current line
# run your bash commands here 
printf "DONE!\n"                           # append to end of current line and then add a new line (\n)

printf "Installing .... "                  # no '\n' in the output so cursor remains at end of current line
# run more bash commands here
printf "DONE!\n"                           # append to end of the current line and then add a new line (\n)

请记住,如果您的任何 'bash commands' 生成 any 输出,那么光标将被移动(可能移动到新行)从而弄乱您的输出。最终结果是您需要确保您的 'bash commands' 不会向 stdout/stderr 生成任何输出(或者,确保所有输出 - stdout/stderr - 都被重定向到文件)。

如果您的要求是让 'bash commands' 将输出发送到终端,那么您可能需要返回使用 tput ... 但这将取决于您想要的方式输出出现。

注意:如果(以上)不符合您的要求,请更新问题并提供更多详细信息。