0

scpなどの多くのプログラムと同様に、シェルで STDOUT に書き込まれた行を変更することはできますか?

ポイントは、画面全体をスクロールすることなく、本質的にティッカーまたは何らかのモニターを使用できるようにすることです。

4

3 に答える 3

1

制御文字とANSI エスケープ コードを使用して端末を操作できます。たとえば\b、カーソルを 1 つ戻して、行頭に\r戻します。これは、単純なティッカーを作成するために使用できます。

for i in $(seq 10)
do
    echo -en "Progress... $i\r"    # -e is needed to interpret escape codes
    sleep 1
done
echo -e "\nDone."

ANSI エスケープ コードを使用すると、画面の一部をクリアしたり、任意の位置にジャンプしたり、出力色を変更したりできます。

于 2012-05-04T17:17:16.577 に答える
1

文字を印刷することで、最後に印刷された行を上書きできます\r

たとえば、これ:

for i in `seq 1 10`; do
   echo -n $i;
   sleep 1;
   echo -n -e "\r" ;
done

10まで印刷1してから更新し2ます。

于 2012-05-04T17:18:04.877 に答える
0

パイプラインで別のプログラムを使用して stdout の出力を変更できます。使用するプログラムを実行すると | 入力を次のプログラムにパイプします。次のプログラムは、出力に対して必要なことを何でも行うことができます。プログラムの出力を変更するための汎用プログラムは sed です。または、前のプログラムのデータを変更する何かを自分で作成することもできます。

シェル プログラムは次のようになります。

while read line; do
    # do something with $line and output the results
done

だからあなたはただすることができます:

 the_original_program | the_above_program
于 2012-05-04T17:10:34.033 に答える