パイプ使用時に気をつけること
bash スクリプトでパイプを使用するとサブシェルが走る.気をつけるべきは,while のような複合コマンド内で変数を利用する場合である:
i=0 find . -name '*.c' | while read file; do let i++ done echo i
では find した .c ファイルの個数ではなく,0 が表示される.while .. done がサブシェルで実行されるからである.
以下のような workaround がある.
i=0 find . -name '*.c' >| find.out while read file; do let i++ done < find.out echo i
bashクックブック p.139〜
- 作者: Carl Albing,JP Vossen,Cameron Newham,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/09/26
- メディア: 大型本
- 購入: 8人 クリック: 268回
- この商品を含むブログ (31件) を見る