我正在尝试构建一个简单的进度条脚本,它将显示一个条形图以及当前正在进行的操作。
在echo -ne "[||...] Processing ${file_name}\r"
的帮助下,我可以将进度条显示为:
[|||||||| ............]处理文件1
但是我期待这样的输出:
处理file1
[|||||||| ............]
注意:两者都是单独的行,我想更新它们作为我的脚本进度。
有没有办法实现这个目标?
答案 0 :(得分:4)
您可以使用tput cuu 2
将光标向上移动两行,使用tput el
清除当前行:
while sleep 1
do
tput el; date
tput el; echo "$RANDOM"
tput cuu 2
done
这将产生两个变化的行,例如
Thu Jul 23 17:50:46 PDT 2015
23676
答案 1 :(得分:1)
@that other guy提供的解决方案假设2个字符的填充足以涵盖$RANDOM
(nonstandard bash-specific功能的差异,该功能从1返回到5位数。)
可以使用从光标位置清除到行尾的终端功能来适应。在这两种情况下,脚本都假设消息足够短,换行不是问题(OP的问题给出了一个可能的例子):
#!/bin/bash
UP1="$(tput cuu 1)"
EL0="$(tput el)"
while sleep 1
do
date
printf '%s%s\r%s' "$RANDOM" "$EL0" "$UP1"
done