Open5

マスタリングLinuxシェルスクリプト 第2版

Daiki OkayamaDaiki Okayama

2章 インタラクティブなスクリプトの作成

Daiki OkayamaDaiki Okayama

ヒアドキュメント

擬似的に複数行のコメントを記述する。

: <<"END"
this
is
multiline
comment
END
  • コロンは何もしない組み込みコマンド
  • << の後の文字列は END でなくともよい
    • 例えば、: <<"COMMENT" ... COMMENT 等でもよい
    • とにかく他の行に現れないような文字にすること

<< 後の文字列のダブルクォーテーションを外すと、コマンド置換が実行される。

sample.sh
cat <<END
$(echo "Hello World")
END
$ bash sample.sh
Hello World

ref: pp. 37-39

Daiki OkayamaDaiki Okayama

coprocess

bash では read -p <prompt> <variable> で プロンプトと結果を代入する変数を同時に扱えるが、zshread における p オプションは coprocess から入力を読み取るという役割を持つ。代わりに read "<variable>?<prompt>" という書式が用意されている。

TOOD: coprocess を利用してテトリスを作れないか考える

Daiki OkayamaDaiki Okayama

標準出力と標準エラー出力のリダイレクト

  • 1>: 標準出力(> に省略可)
  • 2>: 標準エラー出力

リダイレクトは左から順に解釈される

パターン1

$ unknown_command 2>&1 > /dev/null
bash: unknown_command: command not found
  1. 標準エラー出力が標準出力にリダイレクトされる
  2. 標準出力が /dev/null にリダイレクトされる(捨てられる)
  3. エラーのみ表示される

パターン2

$ unknown_command > /dev/null 2>&1
  1. 標準出力が /dev/null にリダイレクトされる
  2. 標準エラー出力が 標準出力 => /dev/null へリダイレクトされる
  3. 何も表示されない