cat
を理解していれば 正しくマニュアル:
ファイルを連結し、標準出力に出力します
cat
引数としてファイルを受け取り、それらを標準出力に出力します。
次のコマンドを使用した場合、取得できません:
cat img.png > copy.png
同一のpngファイルを2つ取得しますが、
cat img.png
端末がめちゃくちゃになって、入力内容を誤解する可能性があります。
- それはどのように可能ですか?
- バイナリ値は引き続きバイナリデータです。一連の0と1、またはそれらのバイナリデータのASCIIでの解釈、または端末でのエンコーディングが何であれ、単純に表示されないのはなぜですか?
- この動作は
cat
でも可能ですか? 奇妙な文字を含むテキストファイルを作成しますか? - try {} catch {}ステートメントのようなこの動作を防ぐメカニズムを実装する必要がありますか?
承認された回答:
cat
コマンドラインで引数として指定されたファイルを標準出力に連結します。一度にバイトを読み取ります。デフォルトでは、読み取ったバイトの解釈は実行されません。
最初の例では、stdoutをファイルにリダイレクトしているため、新しいファイルを取得します。
2番目の例では、バイトが端末に書き込まれ、文字のシーケンスを端末の制御シーケンスとして解釈しているのは端末です。これが、端末で異常な動作をする理由です。 cat
とは何の関係もありません そのため、cat
出力をどうするかわかりません。 「雨の中で歌う」を解釈/処理/印刷または再生するために、パイプを介して別のプログラムに送信している可能性があります。
したがって、UNIX哲学に従って
一つのことをしなさい、一つのことだけをしなさい、しかしそれをうまくやりなさい
cat
何をしようとしているのかを二度と推測しようとしないでください。
以下の@kiwyの最初のコメントへの返信を1つ編集してください。
はい、いいえ、説明させてください
いいえ、cat
の場合 これは、端末(端末ソフトウェア)が出力を画面に送信したり、制御シーケンスを解釈したりするためです(古いハードウェア、つまりテレタイプデバイスをエミュレートしているためです。 。
しかし、
はい、パイプに猫を連れて行き、受信するプログラムが文字をコマンドとして解釈できる場合。
関連:ターミナルでマスクごとにすべてのファイルのリストを取得しますか?
例としてcatthisを見てください。cat anyOldShellScript | bash
bashは、取得したものをコマンドとして解釈します。