zshのパス変数が正しく設定されていません。

zshのパス変数が正しく設定されていません。

何らかの理由で$PATH変数が正しく設定されていません。これは、必要な多くのコマンドを実行できないことを意味します。私のファイル.zshrcの関連行は次のとおりです。

if [[ -f ~/.profile]]; then
    source ~/.profile
fi

これは私の.profileファイルです:

pathdirs=( 
    ~/.rvm/bin
    /usr/local/heroku/bin
    /usr/local/shar/scala-2.10.0/bin
)

for dir in $pathdirs; do
    if [[ -d $dir ]]; then
        path+=$dir
    fi
done

$PATH変数をエコーすると、これら3つの項目のいずれも表示されません。私が実行したときに私が得るcat $PATHものは/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/git/bin: /usr/texbin。私が何か間違っているか誰が見ることができますか?

ベストアンサー1

他の答えのために私が書いた関数は次のとおりです。

_path_assign() { oFS=$IFS ; IFS=: ; add=$* ; unset P A ; A=
    set -- ${PATH:=$1} ; for p in $add ; do {
        [ -z "${p%-[AP]}" ] && { unset P A
                eval ${p#-}= ; continue ; }
        for d ; do [ -z "${d%"$p"}" ] && break
        done ; } || set -- ${P+$p} $* ${A+$p}
        done ; export PATH="$*" ; IFS=$oFS
}

% PATH=/usr/bin:/usr/yes/bin
% _path_assign \
    /usr/bin \
    /usr/yes/bin \
    /usr/bin/nope \
    -P \
    /usr/nope/bin \
    /usr/bin \
    -A \
    /nope/usr/bin \
    /usr/nope/bin

% echo $PATH

出力:

/usr/nope/bin:/usr/bin:/usr/yes/bin:/usr/bin/nope:/nope/usr/bin

a以降のすべてのパラメータがまだ含まれていない場合は、-P前に追加されます。 a以降のすべてのパラメータが$PATHまだ含まれていない場合は、同じです-Aが追加されます。まず、実際のディレクトリであることを確認するには、次のように変更できます。

|| set -- ${P+$p} $* ${A+$p}
done

到着する:

|| { [ -d "$p" ] && set -- ${P+$p} $* ${A+$p}
} ; done

以下を追加して、zsh処理の移植性をさらに高める必要があります。$IFS

[ "${SHELL##*/}" = "zsh" ] && emulate sh

最初の行に移動します。

これらの2つを変更すると、質問のすべてのコードをこの関数に置き換えることができます。

test -f ~/.profile && . $_
_path_assign ~/.rvm/bin \
    /usr/local/heroku/bin \
    /usr/local/shar/scala-2.10.0/bin

おすすめ記事