(俺は)まだシェルスクリプトでこんな初歩的なミスしてんの!?

f:id:suganoo:20180816183921p:plain
シェルスクリプトで初歩的なミスをしてました。

それに気づくまでに半日くらいかかってしまい
すげー自己嫌悪でガッカリです。

同じ轍を踏まないようにブログに書いておきます。

クイズ

下記のシェルスクリプトはエラーになりますが
なんでだかわかりますか?

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=.........

これに気付くまで数時間かかってしまいました。

こんなアホなミスをすると情けなくなってくるんで
気を付けましょう。。。とほほ