どれが外部ファイルで宣言されているのかわからない
シェルスクリプトでかなりの数の変数を外部ファイルで定義をしているものに出会った時に、どれが外部宣言なのかを調べるために作りました。check.py < sample.shって感じで使います。
evalで変数展開して組み合わせて使っている変数には対応していません。
hoge=foo fuga=bar foobar=yes eval echo \$$hoge$fuga # yes
シェルスクリプトでかなりの数の変数を外部ファイルで定義をしているものに出会った時に、どれが外部宣言なのかを調べるために作りました。check.py < sample.shって感じで使います。
hoge=foo fuga=bar foobar=yes eval echo \$$hoge$fuga # yes
exec使ってますか?bashの組み込みコマンドのexecはコマンドの変更の他にリダイレクトの動的変更ができます。こんなシェルスクリプトを実行すると、何もしなければファイルディスクリプタ1番の/dev/stdoutに出力されます。#!/bin/sh echo "first"
これを以下のようにすると、途中で全体のファイルディスクリプタをexecコマンドで変更できます。この場合、firstはstdoutにsecondはfileに出力されます。
#!/bin/sh echo "first" exec > file echo "second"
while read LINE; do # do something... done < fileとしますが、標準入力を変更する事で以下のように書くことができます。
exec < file while read LINE; do # do something... done
doneのところまで読み進まずとも何のファイルを入力とするのかわかる点がメリットでしょうか。デメリットは他人が読んだ時にわからない可能性が高い点です!調べざるを得なかったよ!他人が読みやすいプログラムを書いたほうが絶対に良いので、使わない方が良いでしょう!