【コラム】
リダイレクトはシェルに欠かせない機能の一つだ。標準出/入力をファイルへ向けたり、標準出力を標準エラー出力へ向けたり、また、その逆もできる。リダイレクトはできるシェル使いの第1歩。"command > /dev/null 2>&1"とかっこよくやってみたいもの。
zshも当然リダイレクト機能を持っている。しかし、zshのリダイレクトはbashやtcshのそれとはひと味違う。zshでは最初からリスト1.1の設定が有効になっており、bashやtcshではデフォルトでは実現されていない機能もサポートしている。今回はzshのリダイレクト機能を紹介しておこう。
echoコマンドでテキストを出力して、リダイレクトさせてファイルへ書き込む。これはシェル操作の最初の一歩だが、zshではこれをプロンプト2.1のように書ける。tcshでは「> file1 > file2」はAmbiguous output redirectとしてエラー扱いになって処理されないし、bashではfile2の方にだけテキストが書き込まれる。zshだと両ファイルともに同じテキストが書き込まれる。
ちなみにzshの場合、catコマンドを使わずともプロンプト2.2のように記述することでmoreコマンドと同じような処理をさせることができる。当然、zshなら入力のリダイレクトも複数いける。つまりプロンプト2.3のように書くこともできる。
プロンプト2.3は通っぽい書き方ではあるが、環境変数や設定で動作がかわるしパイプの後では使えない。そもそも一目見て意味わかりにくいので、一通り遊んだあとはいつもどおりコマンドを書く方法を使った方がいいかも。ただし、ここぞというときにおとなりと差をつけられるかも?
zshのすばらしい点はこれだけにとどまらない。パイプを組み合わせてもっとアグレッシブなことができる。たとえばプロンプト3.1をみてほしい(コマンド行先頭の「<」はcatコマンドのかわりで使っている。せっかくなのでこの書き方にしてみたが、ここはcatにしてもいいだろう)。file1の内容をfile3にコピーしているわけだが、これをプロンプト3.2のように記述すると、標準出力にもfile1の内容が出力されるのだ。
プロンプト3.2は、bashなら標準出力にはなにも出力されないし、tcshならAmbiguous output redirectになってエラー扱いで処理すらされない。しかしzshならパイプもリダイレクトのように複数入出力の対象になる。これは使いだすと結構便利だったりする。
ちなみにパイプではなく、リダイレクトで同じこともできる。プロンプト3.3のようにリダイレクト先に/dev/stdinを追加すればいい。
この処理は、コマンドから出力されるメッセージをファイルに落としながらもターミナルにも流しておきたいという場合によく利用するteeコマンドと同じだ。zshの場合、teeコマンドを使わなくともリダイレクトやパイプを組み合わせるだけで実現できるというわけだ。
teeコマンドと同じ処理をするくらいならteeコマンドを使えばいいわけで、このマルチリダイレクトがその本領を発揮するのは複数のリダイレクトをやりたいというシーンだろう。シェルスクリプトで複数のリダイレクトをつかって変態的ワンライナーを作るとことが簡単に進むことがある。shでは難しいこのシチュエーションも、zshを使ってしまえば問題ない。
zshのリダイレクトはファイブグロブとも連系している。たとえばプロンプト4.1のように書いた場合、file1、file2、file3の全てに"hello world"を書き込みたいという気持ちは伝わってくるものの、実際にはfile1に"hello world file2 file3"が書き込まれるだけで、file2とfile3には何もおこならない。
しかし、これをファイルグロブを使ってプロンプト4.2のように実行すると、グロブで展開されるファイルすべての対して"hello world"が書き込まれる。つまりecho "hello world" > file?が"hello world" > file1 > file2 > file3に展開されるわけだ。
当然これは入力へのリダイレクトに対しても同じように機能する。つまり、プロンプト4.3のようにすると当然エラーだが、プロンプト4.4のようにするとすべてのファイルが標準入力になるという寸法だ。
ちなみに、これまでbashを使ってきたのでこのzshの挙動が許せないという向きには、setopt no_multiosを.zshrcに書き込んでおくという選択肢も残されている。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
熊田曜子が最新DVDで美乳引き立つゴールドビキニ姿を披露『WOMAN~本性~』 [22:30 2/10] エンタメ |
|
「グラビア甲子園」特別賞の新人・藤村椿の"フレッシュ・ヒップ"が弾ける! [22:30 2/10] エンタメ |
|
TVアニメ『エウレカセブンAO』、新キャラおよびメカの設定画を紹介 [22:21 2/10] ホビー |
|
宮本恒靖を迎え「選手のセカンドキャリア」を考える! [22:08 2/10] キャリア |
|
NMB48山田菜々・福本愛菜、恋人モードで妄想セリフ!? [22:08 2/10] キャリア |