script(1)の出力に改行CR+LF(dosスタイル)があるのはなぜですか?

script(1)の出力に改行CR+LF(dosスタイル)があるのはなぜですか?

コマンドのタイプスクリプトscript(保存されたファイルなど)では、改行文字はCR + LF(\ r \ n)ですが、元の改行文字(に入力されたものscript)はLFです。なぜ?これはttyの問題のようです。よくわかりません。詳しく説明せずにこれを説明できる人はいますか?

私は何の問題もありませんでした。ただ気になりました。 :) (しかし、修正する方が良いと思います。または少なくとも文書化する必要があります。)

私はscriptutil-linuxから来ましたが、おそらくそれほど重要ではありません。

ベストアンサー1

プログラム出力とキャプチャされたttyストリーム(たとえば)typescriptの違いの根本的な理由は、ttyが印刷機

Unix以前は、テキストが行末に常にCRLFを持っていました。これは、行末の論理表現と見なされたためではなく、各文字が実際の物理的な意味を持っていたためです。言い換えれば、プリントヘッドを左に最後まで動かし、紙を前進させる。

Unixはまったく新しいアプローチを取ります。ディスク上のテキストファイルをプリンタのコマンドではなく、それ自体が便利なオブジェクトとして扱い、行を論理オブジェクトとして扱います。 UNIX の世界観では、2 つの文字行終端は不必要に複雑です。

しかし、彼らは単一の「行末」文字を認識せず、CRで作業の半分だけを実行し、LFで残りの半分だけを実行できるプリンタやCRTの愚かな端末などの既存のハードウェアを使用する必要がありました。したがって、変換はハードウェアに最も近い(ttyドライバで)実行する必要があります。

それ以来、すべてが以前のバージョンと互換性があります。したがって、CRLFの使用を要求するターミナルエミュレータと、プログラムが出力するときに改行文字を提供するttyドライバがあります。

おすすめ記事