我试图让我的 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 - 光标向前