2017-08-23 12 views
-1

を仕事をしたいいけない - 「のprintf」nは、私は本当に、そのシンプルさのためにエコー-neを言っていたが、それは私のために仕事をdoesntの、私はエコーの「プロ」バージョンを使用することを決め、一緒


私はリアルタイムで重要な情報を表示するスクリプトを作成したいです とループをclearループを表示するコマンドは、単に愚かでRAMを消費するものです。私は別の行に表示され、毎秒をリフレッシュしたい3つの重要な変数($ VAR_1 $ VAR_2 $ var_3)(変数が整数とテキストの両方である)

#!/bin/bash/ 
while : 
do 
printf "%s\n\r %s\n\r %s\n\r" $var_1 $var_2 $var_3 
sleep 1 
done 

出力

10.2324 #var_1 
213 #var_2 
120 #var_3 
10.2324 #var_1 
213 #... 
150 
10.2323 
213 
170 

を持っていると仮定します複数の異なる方法で試して、別のフォーラムで検索しましたが、私は答えを見つけませんでした。 3つの変数を3つの異なる行に印刷し、毎秒更新するにはどうすればよいですか?

+0

質問を編集して、実際のスクリプトの出力を表示してください。ただ、「明らかにそれは働かない」と言わないでください。 – Kenster

+0

'\ r'はカーソルを現在の行の先頭に移動するだけです。カーソルを上に移動する方法が必要です*複数の行も上に移動します。 – chepner

+0

@chepnerこれはまさに私が探していたものでした。 –

答えて

1

\rはカーソルを現在の行の先頭に移動するだけですが、カーソルはまでの3行も移動する必要があります。別のエスケープコードを使用する必要があります。お使いの端末によるANSIのエスケープコードを使用することを想定すると、あなたはこれが別の行に各変数を印刷し

while :; do 
    printf '%s\n' "$var_1" "$var_2" "$var_3" 
    printf '\033[3A' # move up 3 lines 
    sleep 1 
    ((var_1++, var_2++, var_3++)) # Simple changes to demonstrate 
done 

を使用することができ、その後、寝前に戻って先頭にカーソルを移動します。