印刷変数は印刷されません。 \|

印刷変数は印刷されません。 \|

Kafka 起動スクリプト出力を変数としてキャプチャし、Kafka の起動時に \|/ を印刷して回転する生産ラインをシミュレートします。だから私がするとき:

res=`./confluent start kafka`
echo $res

結果:

kafka is [UP][UP] Starting kafka

しかし、私がこれを行うと:

echo $res > /tmp/res.txt

Windows でこのファイルを開くと、次の結果が表示されます。

Starting zookeeper 
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\zookeeper is [[0;32mUP[0m] Starting kafka 
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-kafka is [[0;32mUP[0m]

Linuxでこのファイルを開くと、次の結果が表示されますecho

kafka is [UP][UP] Starting kafka

この文字がWindowsでのみ表示されるのはなぜですか?

ベストアンサー1

試してecho "$res" | hexdump -Cみてください。各後に1つずつ、hexdump -C /tmp/res.txt16進0dバイト(キャリッジリターン)が表示されます。\|/-

なぜ?改行文字のないキャリッジリターンはカーソルを行の先頭に戻し、その後に印刷された内容はすでに存在する内容を上書きします。

これは、行の先頭にテキストローターを実装する一般的な方法です(行の最後に実装する場合、トリックは次のようになります)。いいえLFまたはCRを印刷し、各スピナー文字の後にバックスペース文字(^H別名-、ASCII文字0x08)を使用しますCtrl。通常、最初に少しの遅延が発生します。H

<ESC>[2K注:行クリア(または1b 5b 32 4bvt-100準拠の端末ではHex)や行末で消去(ESC[KまたはHex)など、各キャリッジリターンの近くで端末制御シーケンスを表示することも一般的です。1b 5b 4bこの場合、Windowsエディタで一部の破損した形式で表示される可能性があるため、これが発生する可能性はありません。

つまり、キャラクターはい出力はあまりにも早く上書きされ、ユーザーは見ることができません。 Windowsエディタでは、CRをCR-LFに「有用に」変換できます。

ただし、Unixではテキスト行を終了するためにLFのみを使用します。 WindowsではCR-LFを使用しています。 UNIX以前のMacはCRのみを使用していました。

おすすめ記事