Bash。显示计数器和更多信息的无限循环

Bash. infinite loop showing a counter and more info

我有一个脚本可以动态生成另一个 bash 脚本。在这个 heredoc 脚本中有一个显示计数器的无限循环(这有效!):

date1=`date +%s`
while true; do
    echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done

如果你只放这个,这个循环就可以正常工作。问题是我不仅需要展示柜台。需要更多信息(一些静态数据)。我会把我不工作的代码:

#!/bin/bash
dir="/tmp/"
my_file="generatedscript.sh"

rm -rf "$dir$my_file" > /dev/null 2>&1

exec 3>"$dir$my_file"

cat >&3 <<-'EOF'
    #!/bin/bash
    date1=`date +%s`
    while true; do
        echo -ne "Info\n" # this is the damned line, if you remove it the counter works fine
        echo -ne "Time counter: $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
    done
EOF

exec 3>&-

xterm -hold -geometry 78x25+0+0 -T "Testing" -e "bash \"$dir$my_file\"" > /dev/null 2>&1 &

这显示 xterm window 有很多行,信息行与其他行的 "Time" 字重叠。我想将信息行与时间计数器行和计数器分开显示 运行... 并且只显示一次!

如果删除行 echo -ne "Info\n" 计数器显示正常,运行 并且只显示一次...如何将另一条不同的行(带有信息的回显)放在上面并且作为固定线路不重复?有可能吗?知道如何达到这个目的吗?谢谢。

只需将 INFO 行移出循环即可。我通常更喜欢将回车 return 放在行的开头。 -n-e 都不是可移植的,所以除了最简单的 echo.

之外,我通常更喜欢 printf
dir="/tmp/"
my_file="generatedscript.sh"

script="$tmp/$my_file"
cat > "$script" <<'EOF'
echo INFO
date1=$(date +%s)
while true; do
  now=$(date +%s)
  delta=$((now - date1))
  printf '\rTime counter: %s' "$(date -u --date "$delta" +%H:%M:%S)"
done
EOF
chmod +x 500 "$tmp/$my_file"
xterm -hold -geometry 78x25+0+0 -T "Testing" -e "$script" > /dev/null