Ich versuche hier ein sehr einfaches Setup-Muster zu verwenden: Ich habe zwei verschiedene Installationen eines bestimmten Tools (ocamlc, aber das ist nicht wirklich wichtig). Um ein Werkzeug auszuwählen, versuche ich, die PATH-Variable durch Voranstellen eines Eintrags zu überschreiben.Warum ignoriert zsh die Reihenfolge der PATH-Einträge?
% 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
jedoch die zsh verwendet immer noch den älteren Eintrag:
% ocamlc -v
The OCaml compiler, version 4.02.3
Standard library directory: /home/choeger/.opam/4.02.3/lib/ocaml
(Man kann sehen, dass es den zweiten Eintrag verwendet, weil das Bibliotheksverzeichnis zu dieser Installation fest einprogrammiert wird)
Bash verhält wie erwartet:
% 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
Also warum ignoriert zsh den ersten PATH-Eintrag, obwohl ich t listet es als erstes Element von where
auf?
edit: Um diese zsh zu überprüfen nicht die gleiche binäre aufrufen, hier ist ein weiterer Lauf:
% 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: Hier ist die setopt Ausgang:
% setopt
autocd
autopushd
nobeep
completeinword
correct
extendedglob
extendedhistory
histignorealldups
histignorespace
nohup
interactive
interactivecomments
longlistjobs
monitor
nonomatch
pushdignoredups
shinstdin
zle
%
Config ist Die grml-Konfiguration hat here plus einige Pfadvariablen in der .local-Datei gefunden.
Leider nicht. Siehe Bearbeiten. – choeger
Es muss einen anderen Grund haben. Theoretisch könnte "ocamlc" abfragen, wie es aufgerufen wurde (über PATH oder durch den ABS-Pfad), obwohl es selten ist, dass Programme dies tun. Versuchen Sie, den PATH explizit zu reduzieren, dh 'PATH =/home/choeger/ueb/uebb/amsun-integration/tests/pendel /../../ opam/4.02.3/bin ocamlc -v' .... In diesem Fall hat zsh keinen anderen PATH zur Auswahl. Wenn Sie wirklich sicher sein wollen, schreiben Sie 'command ocamlc' anstelle von' ocamlc'. Das Schlüsselwort 'command' würde Alias-Expansions- und Shell-Funktionsdefinitionen umgehen. – user1934428
Befehl ändert nichts, explizite Einschränkung des Pfades führt zum erwarteten Ergebnis. – choeger