質問: スクリプト(1)の出力で、改行がcr + lf(dos-style))であるのはなぜですか? scriptコマンドのtypescript(つまり、保存されたファイル内)では、改行はcr + lf(\ r\n)ですが、元の行はscript)はlfです。なぜですか?それは私がまったく知らないttyの問題のようです。誰かが詳細なしでそれを説明できますか?私は何の問題もありません。私はただ興味があります。 :)(しかし、私はそれを修正する方が良いと思います、または少なくとも文書化する必要があります。)私のscriptはutil-linuxからのものですが、おそらくそれほど重要ではありません。
回答: プログラム出力とキャプチャされたttyストリーム(例:typescript)の不一致の深い理由は、ttyが以前はprintersであったことです。unixの前は、テキストは常に行末にcrlfを持っていました。これは、行末の論理表現であると見なされたためではなく、文字が個別に実際の物理的意味を持っていたためです。プリントヘッドを左端まで移動します。 、そして紙を進めます。unixは根本的な新しいアプローチを採用しました。それは、ディスク上のテキストファイルをそれ自体で有用なオブジェクトとして扱い(プリンタの指示だけでなく)、行を論理エンティティとして扱います。 unixの世界観では、2文字のラインターミネータは不必要に複雑です。しかし、彼らは既存のハードウェアで動作する必要がありました-単一の「行末」文字を認識しないプリンターとcrtダム端末で、半分の仕事をするのはcrだけで、lf to残りの半分を実行するため、変換を実行する必要があり、そのハードウェアに可能な限り最も近い場所、つまりttyドライバーで実行されました。それ以来、すべて下位互換性があります。つまり、crlfを要求するターミナルエミュレータと、プログラムが改行を出力するときにそれを提供するttyドライバがあります。