Skip to content

Latest commit

 

History

History
54 lines (39 loc) · 1.63 KB

014-cat.md

File metadata and controls

54 lines (39 loc) · 1.63 KB

cat

catは、ファイルを連結して表示する。

$ echo hello > hello.txt
$ cat hello.txt
hello
$ cat hello.txt hello.txt
hello
hello

ファイルを指定しない場合は標準入力から読む。ファイルとして-を指定した場合も標準入力から読む。

$ cat
abc
abc
$ cat hello.txt -
hello
abc
abc

catの面白い使い方としては、プログラムのttyに対する特殊な処理を阻害することができる。

例えば、manは出力先をttyだと判断するので、moreかlessによるページャーが実行される。パイプでcatにつなぐことにより、manからはttyとして見えなくなり、ページャーが起動されなくなる。

$ man cat
# ページャーが起動する
$ man cat | cat
# ページャーは起動されない

実はページャーもcatにパイプするとページャーとしての機能を自発的にやめてくれる。

$ echo hello | more | cat
hello

少なくとも、今のほとんどのOSに入っているページャーの実装はそうなっている。

POSIXではcatに唯一の引数として-uが定められている。これは入力ファイルから標準出力までの間に遅延を挟まない。つまりバッファーしないという意味だ。

ただし、GNU coreutilsのcatでは-uは無視される。

catにはその他の引数もあるが、POSIX標準では実装ごとの揺れが大きかったり、本質的に重要ではないとの理由で削られている。

catはUNIX Version 1から存在した。

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html