つなぐ

INPUT · スライド

結果をファイルに残す(`>`)

01 / 07

コマンドには出口と入口がある

この章の主役はつなぎ方だよ。そのために、まず1つの見取り図を覚えてほしい。

どのコマンドにも、出口が2つと入口が1つ付いているんだ。

  • 標準出力 … ふつうの結果が出てくる出口
  • 標準エラー出力 … エラーだけが出てくる出口
  • 標準入力 … 文字を受け取る入口

ふだんは出口2つとも画面につながっているので、区別が見えないだけだよ。この章でそれを別々の行き先につなぎ替えることを覚えるんだ。

02 / 07

`>` で出口をファイルに向ける

> を書くと、標準出力の行き先が画面からファイルに変わるよ。

```
ls > ichiran.txt
```

打っても画面には何も出ない。結果はファイルの中に入ったからだね。

> は「こっちに流して」という向きの矢印だと思えばいいよ。左のコマンドの結果が、右のファイルに流れこむんだ。

~ $ ls > ichiran.txt~ $ cat ichiran.txtkazu.txtkekkamemo.txtnamae.txt

03 / 07

ファイルは自動で作られる

> の右に書いたファイルは、無ければ作られるよ。先に touch しておく必要はない。

そして、あれば中身が消される。ここが怖いところだよ。

```
echo A > memo.txt # memo.txt の中身は A だけになる
```

確認も警告も出ない。黙って上書きするんだ。これは Unix の道具ぜんぶに共通する態度で、「打った人は分かっているはず」という作りなんだよ。

04 / 07

何の出力でも残せる

> はどのコマンドにも使えるよ。出口をつなぎ替えるだけで、コマンドの側は何も知らないままなんだ。

```
ls > ichiran.txt
sort kazu.txt > narabeta.txt
wc -l namae.txt > kazoeta.txt
find . -name '*.txt' > mitsuketa.txt
```

この「どの道具にも同じやり方が効く」ところが、コマンドラインの気持ちよさだよ。覚えることが増えないんだ。

05 / 07

同じファイルに向けてはいけない

ひとつだけ、絶対にやってはいけない形があるよ。

```
sort kazu.txt > kazu.txt # ✗ 中身が消える
```

読みながら書けそうに見えるけれど、シェルは先にファイルを空にしてからコマンドを動かすんだ。だから sort が読むときには、もう何も残っていない。

結果は 0 バイトのファイル。この失敗はよくあるので、いちど自分の目で見ておこう(あとの問題でやるよ)。

06 / 07

書く場所は前でもいい

実は > はコマンドのうしろでなくてもいいんだ。

```
> out.txt ls # これも動く
ls > out.txt # ふつうはこう書く
```

同じ意味だよ。>シェルへの指示で、コマンドの引数ではないから、どこに書いてもいいんだ。

ふつうはうしろに書くけれど、この事実は「> はコマンドが受け取っているのではない」ことの証しになるので覚えておいて。ls は自分がファイルに書いていると気づいてもいないんだよ。

07 / 07

さあ、打ってみよう

namae.txt に3人の名前、kazu.txt に3つの数、memo.txt に1行のメモが入っているよ。kekka という空の入れ物もあるよ。

書き出したら、必ず cat で確かめる癖をつけよう。画面に出ないやり方をしているときは、確かめないと成功したのか分からないからね。