/bin/sh に -f オプションなんてねえ!(疲)
今日、↓みたいなロジックというか記述でエラーになってしまう原因が分からず2時間ぐらいはまってしまった(泣)
#!/bin/sh -f a=/aaa/bbb/ccc b=*XXX #メタキャラを使って、該当ファイルを表示 ls -lt ${a}/${b} ret=$? echo ${ret}
動作環境は、Solaris10。
本当はコピーなんだけど、全然分からなくて、どんどんデバッグで端折っていったら
こんな形になっちゃった。。
こいつを動かすと、lsが『こんなファイルはありません』という意味不明な事を仰いながら、
戻り値2を返してエラーになる。
コマンドから、ls -lt 〜と入力すると正常に動くし、
なんとshコマンドで動かしてもちゃんと動くが、、、
上のシェルだけで動かすとエラーになる。どうも変数にあるメタキャラが機能せず、
文字として認識されるのがいけないみたい。。
すごく悩んで、shのヘルプを見たら、、実は、-fオプションなんてない事に気づく。
cshは高速起動させる意味のfオプションあるんだけど、、shにはなかった。
(既存のシェルが仕様で、なぜかCシェルとなっているために、クセで書いてしまったのだろうか?
fオプションをなくして、/bin/sh だけにしたら、何事もなくちゃんと動いてくれました。 orz
まあ、良かったけど、、
今までにリリースしたシステム系のシェルで、私が作ったのって、、
みんな-fオプションが付いているんだよなあ(汗)
ま、まあ、ちゃんと動いているし、
私の胸の中にしまっておこう*1
*1:すぐ出てくるか心配だけど