つなぐ

INPUT · スライド

画面にも出してファイルにも残す(`tee`)

01 / 06

`>` だと画面が見えない

> でファイルに残すと、画面には何も出ないよね。うまくいったのか分からないので、あとで cat して確かめることになる。

```
ls > ichiran.txt
cat ichiran.txt # 確かめるためにもう1回
```

両方いっぺんにできたら楽だよね。それをするのが tee だよ。

02 / 06

`tee` は T 字の分岐

名前の由来はアルファベットの T だよ。水道管の T 字の継手(つぎて)を思い出して。1本入って2本出る形だね。

```
ls | tee ichiran.txt
```

受け取ったものをファイルに書き、同時に出口にも出すんだ。だから画面にも出るし、ファイルにも残る。

> の代わりに使えると思っていいよ。違いは「画面にも出るかどうか」だけだよ。

~ $ ls | tee ichiran.txtkiroku.txtkudamono.txtnamae.txt~ $ cat ichiran.txtkiroku.txtkudamono.txtnamae.txt

03 / 06

パイプの途中に挟める

tee の本当の値打ちはここだよ。パイプの途中に挟めるんだ。

```
sort kudamono.txt | tee sorted.txt | uniq -c
```

流れはこう。

1. sort の結果が tee に届く
2. teesorted.txt に書く
3. 同時に uniq -c にも渡す

流れを止めずに、途中の様子を取っておけるんだよ。> だとそこで流れが終わってしまうので、これは tee にしかできないことだよ。

04 / 06

長いパイプを調べるときに効く

5段つないだパイプの結果が思った通りでないとき、どこが悪いか分からないよね。そこで tee を挟むんだ。

```
A | tee 1.txt | B | tee 2.txt | C
```

こうすると、A の出力が 1.txt、B の出力が 2.txt に残る。あとから順に開いて、どの段で変になったかを確かめられるんだ。

プログラムを書く人は、これを「途中で print して確かめる」のと同じことだと感じるはずだよ。パイプでの調べ方はこの tee なんだ。

05 / 06

`tee -a` と、いくつも書く

> に対する >> と同じで、tee にも足すやり方があるよ。-a(append)だよ。

```
date | tee -a kiroku.txt
```

それと、書き先をいくつも並べられるよ。

```
ls | tee a.txt b.txt c.txt
```

同じものを3つのファイルに同時に書けるんだ。> ではできないことだよ(> は1つだけ)。

画面に出したくないなら、うしろに > /dev/null を足せばいいよ。「ファイルにだけ書く tee」という使い方もあるんだ。

06 / 06

さあ、打ってみよう

kudamono.txt(果物6行)、namae.txt(名前3行)、kiroku.txt(見出し1行)があるよ。

この回で意識してほしいのは流れが続いているかどうかだよ。

  • > … 流れはそこで終わる
  • tee … 流れは続く

この違いが分かれば tee は使えるようになるよ。