« 「だが我々は違う」 | メイン | ブライアン公演チケット »

2004年11月06日

シェルスクリプトで値を受け取る

仕事で、誰かが作ったこんなようなシェルスクリプト(bash)を触った。

sed -e 's/\"//g' $1 > TempFile
TEMP=`cat TempFile`
java MyClass "$TEMP"

受信したメールがprocmailで振り分けられて、ヘッダと本文がまとめて引数$1に入ってくる。
それをさらにJavaのクラスに渡して起動するのだけど、そのままじゃダブルクォートのせいで引数が分割されてしまうので、sedで消して一時ファイルに保存している。でもこのファイル入出力は必要ない気がする。

TEMP=`sed -e 's/\"//g' $1`
java MyClass "$TEMP"

こんなのでいいのではないか。
ちなみに、呼ばれたJavaのクラスは、メール送信者アドレスを生成したIDとともにDBに格納して、その後自動返信するようになっている。
(追記: 直接Javaクラスを呼ばないのはなにかわけがあるんだろう……か。)

ぼくの感覚では、メールのような長い文字列を引数で渡すのはなんだか気持ち悪い。
せめて標準入力で渡す方法はないのだろうか。
考えてみればシェルスクリプトで標準入力を受け取るやり方を知らない。そういう場合はだいたいPerlを使ってしまうから。
調べてみたら、次のように書けることが分かった。

while read IN
do
  TEMP=${TEMP}${IN}
done

ただ、これだと改行が消えてしまう。
標準出力に吐くだけならdoのなかで毎回echoすれば改行してくれるけど。
シェルスクリプトでの改行の出力はどうやるんだろう。

投稿者 mit : 2004年11月06日 13:23