cat
マニュアルを正しく理解している場合:
ファイルを連結して標準出力に出力する
cat
はファイルを引数として取り、それらを標準出力に出力します。
次のコマンドを使用すると、取得できないものがあります。
cat img.png > copy.png
2つの同じpngファイルを取得しますが、
cat img.png
私の端末はめちゃくちゃになり、入力したものを誤って解釈する可能性があります。
cat
ingすることでも可能ですか?cat
は、コマンドラインで引数として指定されたファイルを標準出力に連結します。一度にバイトを読み取ります。デフォルトでは、読み取ったバイトを解釈しません。
最初の例では、stdoutをファイルにリダイレクトしています。そのため、新しいファイルを取得します。
2番目の例では、バイトが端末に書き込まれ、文字シーケンスを端末の制御シーケンスとして解釈しているのが端末です。これが、端末で異常な動作が発生する理由です。そのため、cat
とは何の関係もありません。cat
は、その出力をどう処理するかを認識していません。パイプを介して別のプログラムに送信して、「雨の中で歌う」ことを解釈、処理、印刷、または再生することができます。
したがって、unixの哲学に従い、
1つのことを行う、1つのことだけを行うが、それをうまく行う
cat
は、何をしようとしているのかを二度と推測しようとしてはなりません。
以下の@kiwyの最初のコメントへの返信1を編集します。
はい、いいえ、説明させてください、
いいえ、ターミナルにcat
を入力すると、ターミナル(ターミナルソフトウェア)が出力を画面に送信したり、制御シーケンスを解釈したりするためです(古いハードウェアの一部をエミュレートしていますテレタイプデバイス)。)。
だが、
はい、パイプにキャットして、受信するプログラムが文字をコマンドとして解釈できる場合は可能です。
例として猫にこれを見てください、cat anyOldShellScript | bash
bashは、取得したものをコマンドとして解釈します。
これは主に、0x20未満のコードの印刷できない文字が原因で発生すると思います。これらは、Backspace、Deleteなどのキーに使用される特別な制御/エスケープコードです。