Bash

如何在帶有迴聲的bash中向前移動?

  • November 21, 2017

我正在嘗試讓我的 bash(或 tcl)腳本更新一行三列。回到行首後,我不知道如何繼續跳過一些字元。我想更新特定資訊,而不是整行。

我的腳本並行執行另一個腳本的多個實例,該腳本發送三種類型的消息(P1、P3 和 P7)中的一種。發送消息時,需要更新與該類型消息相關的列。

我想用 echo 列印這樣的東西:

發送的消息數是:

P1:2 P3:1 P7:5

第一行是靜態的,第二行是動態的(第二行中的數字需要不斷更新) 我可以使用 ‘\b’ 或 ‘\r’ 在行中向後移動而不覆蓋字元。但是我怎樣才能在不覆蓋之前的字元的情況下繼續前進呢?是否有某種“反向”“\b”?

(這是重擊)

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 - 游標向前

這裡有可用的轉義碼列表。

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

引用自:https://unix.stackexchange.com/questions/231089