exec redirect-out
exec
使ってますか?bashの組み込みコマンドのexec
はコマンドの変更の他にリダイレクトの動的変更ができます。こんなシェルスクリプトを実行すると、何もしなければファイルディスクリプタ1番の/dev/stdoutに出力されます。#!/bin/sh echo "first"
これを以下のようにすると、途中で全体のファイルディスクリプタをexecコマンドで変更できます。この場合、firstはstdoutにsecondはfileに出力されます。
#!/bin/sh echo "first" exec > file echo "second"
exec redirect-in
リダイレクトインも同様に動的変更ができますが、おもな使い所はwhile readだと思います。普通ファイルから1行ずつ読み込んで処理を行う場合はwhile read LINE; do # do something... done < fileとしますが、標準入力を変更する事で以下のように書くことができます。
exec < file while read LINE; do # do something... done
doneのところまで読み進まずとも何のファイルを入力とするのかわかる点がメリットでしょうか。デメリットは他人が読んだ時にわからない可能性が高い点です!調べざるを得なかったよ!他人が読みやすいプログラムを書いたほうが絶対に良いので、使わない方が良いでしょう!