プロンプトの前に「head -c」出力が表示されます。

プロンプトの前に「head -c」出力が表示されます。
head -c 3 sample.txt

プロンプトで、ユーザー名の前に出力が表示されます。

Theuser@localhost:/home$

Theその後はもう印刷できません$

私の端末がなぜこれを行うのですか?

ベストアンサー1

Theその後印刷されませんでした。$

なぜこれを行うべきですか?head最初に印刷した後、シェルは次のコマンドを入力するように求めます。プロンプトが別の行に表示されると予想するのはやや合理的ですが、後ろに(次のような)The

head -c 3 sample.txtThe後で改行なしで正確に印刷されますehead標準出力(この場合は端末)に3バイトを印刷するように要求すると、正確に3バイトが得られます。その中に改行文字はありません。

通常、echoコマンド(たとえば)のテキスト出力は改行文字で終わります。コマンドが終了すると、シェルがプロンプトを印刷すると、改行文字の直後にプロンプ​​トが印刷されるため、新しい行の先頭にプロンプ​​トが表示されます。

あなたの場合は、後ろに改行文字がないので、Theシェルが端末に印刷されると、プロンプトが同じ行に表示されます。

一部のシェルはこれがすぐに起こることを検出します。あなたのシェルは明らかにそうではありません。

行を処理するツールは、その文字が実際に自分の行に属するため、改行を使用して印刷します。たとえば、ソースデータの最後の行が不完全な場合(つまり、末尾の改行がない場合)、その行をsample.txt無視するか、そのまま印刷するか(改行なしで)修正(改行を追加)して処理できます。 );これはツールとその成果によって異なります。

完全な行を含むだけでsample.txtなく、head -n行を処理することでも完全な行が期待できます。ただし、head -cバイトを扱うときに印刷する最後のバイトが改行文字であることを事前に知らない限り、出力の最後の行が完了したと仮定してはいけません。

echo後で引数なしで呼び出すことで、改行文字を簡単に追加できますhead

head -c 3 sample.txt; echo

これにより、プロンプトがほぼ確実に別々の行に表示されます。この改行文字echoではなくから来るということを覚えておいてくださいsample.txt


head*カーソルの移動などを含む端末制御シーケンスを出力する場合は例外です。これらのシーケンスが3バイトに収まるとは思わないが、通常、ファイルにそのシーケンスが含まれていて、端末がそれを理解して十分なバイトを要求すると、端末はそれに従います。このような場合は、どこからでもプロンプトを見ることができます(またはもっと悪い)

おすすめ記事