シェル変数(path)の挙動がわかりません
シェル変数の挙動がわからなくて困っています。
以下のような3ファイルがあります。
% cat /tmp/test_config.sh
#!/opt/local/bin/zsh
path=($path /tmp)
% cat /tmp/test.sh
#!/opt/local/bin/zsh
. /tmp/test_config.sh
echo $PATH
echo $path
/tmp/test2.sh
% cat /tmp/test2.sh
#!/opt/local/bin/zsh
echo $PATH
echo $path
which test.sh
これを、所有者のユーザで実行するのとsu -c で実行するので挙動が変わります。
% /tmp/test.sh
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp
/usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp
/usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp
/tmp/test.sh
% sudo su - hogehoge -c /tmp/test.sh
/bin:/usr/bin:/usr/ucb:/usr/local/bin:/tmp
/bin /usr/bin /usr/ucb /usr/local/bin /tmp
/bin:/usr/bin:/usr/ucb:/usr/local/bin
/bin /usr/bin /usr/ucb /usr/local/bin
test.sh not found
この挙動の違いは、何から産まれるんでしょう? .zshrc でそういう設定ができるんでしょうか? .zshenv は使ってません。
(なお、環境変数$PATHを使えば目的は果たせると言うのはわかっています)
お礼
なるほど、なっとくです。sudo はシェルでは使えなそうですね。ありがとうございます。