如何在 bash 中使用 echo 向前移动一行?

如何在 bash 中使用 echo 向前移动一行?

我试图让我的 bash(或 tcl)脚本更新一行三列。回到行首后,我不知道如何继续跳过一些字符。我想更新特定信息,而不是整行信息。
我的脚本并行执行另一个脚本的多个实例,该脚本发送三种类型的消息(P1、P3 和 P7)中的一种。发送消息时,需要更新与该类型消息相关的列。

我想用 echo 打印这样的内容:
发送的消息条数为:
P1:2 P3:1 P7:5

第一行是静态的,第二行是动态的(第二行中的数字需要不断更新)我可以使用'\b'或'\r'在行中向后移动而不覆盖字符。但是我怎样才能在不覆盖之前的字符的情况下向前移动呢?是否有某种“反向”“\b”?

答案1

tput(1)可能适合这个任务:

#! /usr/bin/env bash

trap 'printf "\nbe seeing you\n"; exit' INT

clear
printf "blah de blah\n"

while [[ 1 ]]; do
  tput cup 1 0

  x=$(( RANDOM % 42 ))
  y=$(( RANDOM / 42 ))
  z=$(( RANDOM * 42 ))

  printf "P1: %d P3: %d P7: %d\n" $x $y $z
  sleep 1
done

答案2

(这是bash)

printf "P1: 2 P3: 1 P7: 5\n"
printf "\033[2A\033[4C3\033[2B\r"

将打印P1: 2 P3: 1 P7: 5然后将其更改为P1: 3 P3: 1 P7: 5.

打印终端转义码的一般方法是:

\033 价值 [ 代码

,其中示例代码为:A - 光标向上、B - 光标向下和 C - 光标向前

这里有可用的转义代码列表。

相关内容