![如何在 bash 中使用 echo 向前移动一行?](https://linux22.com/image/73459/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20echo%20%E5%90%91%E5%89%8D%E7%A7%BB%E5%8A%A8%E4%B8%80%E8%A1%8C%EF%BC%9F%20.png)
我试图让我的 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 - 光标向前