私はここで非常に基本的なセットアップパターンを使用しようとしています:私は、特定のツール(ocamlcの2つの異なるインストールがありますが、それは本当に問題ではありません)。 1つのツールを選択するために、エントリを前置することによってPATH変数をオーバーライドしようとします。 zshがPATHエントリの順序を無視するのはなぜですか?
% ocamlc -v
The OCaml compiler, version 4.02.3
Standard library directory: /home/choeger/.opam/4.02.3/lib/ocaml
(一つは、ライブラリディレクトリがそのインストールにハードコードされているので、それは2番目のエントリを使用していることがわかります)
はバッシュの動作:
% where ocamlc
/home/choeger/ueb/uebb/amsun-integration/Runtime/test_src/../../opam/4.02.3/bin/ocamlc
/home/choeger/.opam/4.02.3/bin/ocamlc
/usr/bin/ocamlc
しかし、zshのは、古いエントリを使用しています
% bash -c "ocamlc -v"
The OCaml compiler, version 4.02.3
Standard library directory: /home/choeger/ueb/uebb/amsun-integration/opam/4.02.3/lib/ocaml
なぜ、zshは最初のPATHエントリを無視しますか? tはそれをwhere
の最初の要素として列挙しますか?
編集:
% type -a ocamlc
ocamlc is /home/choeger/ueb/uebb/amsun-integration/tests/pendulum/../../opam/4.02.3/bin/ocamlc
ocamlc is /home/choeger/.opam/4.02.3/bin/ocamlc
ocamlc is /usr/bin/ocamlc
% ocamlc -v
The OCaml compiler, version 4.02.3
Standard library directory: /home/choeger/.opam/4.02.3/lib/ocaml
% /home/choeger/ueb/uebb/amsun-integration/tests/pendulum/../../opam/4.02.3/bin/ocamlc -v
The OCaml compiler, version 4.02.3
Standard library directory: /home/choeger/ueb/uebb/amsun-integration/opam/4.02.3/lib/ocaml
EDIT2:
% setopt
autocd
autopushd
nobeep
completeinword
correct
extendedglob
extendedhistory
histignorealldups
histignorespace
nohup
interactive
interactivecomments
longlistjobs
monitor
nonomatch
pushdignoredups
shinstdin
zle
%
コンフィグがある:ここでは はSETOPT出力で同じバイナリを起動していないことのzshを検証するために は、ここに別の実行でありますgrml configにはhereと.localファイルにいくつかのパス変数があります。
残念ながら、それはありません。編集を参照してください。 – choeger
別の理由が必要です。理論的には、 'ocamlc'は、プログラムがこれを行うことは稀ですが、どのように呼び出されたかを(PATHまたはabsパスによって)問い合わせることができます。明示的にPATH、すなわち 'PATH =/home/choeger/ueb/uebb/amsun-integration/tests/pendulum /../../ opam/4.02.3/bin ocamlc -v'を省略しようとすると....この場合、zshには他のPATHがありません。本当に確かめたいのであれば、 'ocamlc'の代わりに' command ocamlc'を書いてください。キーワード 'command'はエイリアス拡張とシェル関数定義をバイパスします。 – user1934428
コマンドは何も変更しません。パスを明示的に制限すると、予期した結果が得られます。 – choeger