シェルスクリプトで初歩的なミスをしてました。
それに気づくまでに半日くらいかかってしまい
すげー自己嫌悪でガッカリです。
同じ轍を踏まないようにブログに書いておきます。
クイズ
下記のシェルスクリプトはエラーになりますが
なんでだかわかりますか?
test.sh echo "---- test script ----" function ls_test() { PATH=$1 ls -l ${PATH} | grep "hoge" } ls_test "."
実行結果
$ sh test.sh ---- test script ---- test.sh: line 5: ls: コマンドが見つかりません test.sh: line 5: grep: コマンドが見つかりません
あれれ、ごくごく単純な「ls」や「grep」が見つからない
っと言われてますね。
もちろんですが「ls」と「grep」を単独で実行できます。
なんでだかわかりましたか?
簡単ですよね?
答え
環境変数のPATHが書き換わってるんですね。
なのでコマンドが使えなくなってるんです。
自分はまったく気づきませんでした。
こんな感じにPATHじゃなくて別の変数名にすればOKです。
test.sh echo "---- test script ----" function ls_test() { LOCAL_PATH=$1 ls -l ${LOCAL_PATH} | grep "hoge" } ls_test "."
ちなみにですが printenv で環境変数を確認できます。
$ printenv HOSTNAME=hoge01 SHELL=/bin/bash TERM=xterm HISTSIZE=1000 PATH=.........
これに気付くまで数時間かかってしまいました。
こんなアホなミスをすると情けなくなってくるんで
気を付けましょう。。。とほほ