OSX-Terminal-Suchverzeichnisse

0

Ich arbeite mit cygwin unter Windows und habe gerade angefangen, einen Mac zu verwenden. Ich frage mich, warum es scheint, dass Suchpfade nicht so funktionieren, wie sie sollten.

Wenn ich ein Programm habe /usr/bin/prog und ich lösche es. Es scheint, als würde man diesen genauen Pfad weiterhin versuchen, anstatt ihn erneut zu suchen (sagen wir, ich verschiebe ihn nach /usr/local/bin ).

Liegt das an der Terminal-App oder ist es etwas Besonderes für den Mac? Auch, wenn ich eine neue Version von Python installieren möchte /usr/local/binist der richtige Weg, um es zu entfernen /usr/bin/?

vonhogen
quelle

Antworten:

3

Sie sagen nicht, welche Shell Sie verwenden, obwohl Ihre Frage mit einem Tag versehen ist bash. Die Standard-Mac OS X-Shell ist tcsh, welche Wenn Sie tcsh oder csh verwenden, wird eine Tabelle mit Elementen auf Ihrem Pfad zwischengespeichert. Um die Tabelle zu aktualisieren, geben Sie das aus rehash Befehl an der Shell-Eingabeaufforderung.

Sie müssen dies tun, wenn Sie eine ausführbare Datei verschieben oder löschen oder wenn Sie Ihrem Pfad etwas hinzufügen.

Wenn du das wirklich benutzt bash Shell dann gilt dies nicht.

Eric
quelle
1
Die Mac Os X-Standardshell ist nicht tsch es ist bash. (Es war früher in 10.2.x) Es wurde nach 10.3.x geändert
ocodo
Hoppla ... Daran habe ich später gedacht. Ich habe meine Standard-Shell vor so langer Zeit auf tcsh geändert, dass ich es vergessen habe. Das Verhalten, das verhogen sieht, lässt sich jedoch sehr gut durch das tcsh / csh-Verhalten erklären, das ich zu dieser Schlussfolgerung gezogen habe
Eric
2

Das OS X-Terminal versucht, die in Ihrer PATH-Variablen deklarierten Pfade der Reihe nach zu durchsuchen, bis es sie findet oder die zu überprüfenden Stellen ausgehen. Sie können die PATH-Variable überprüfen, indem Sie an der Eingabeaufforderung Folgendes eingeben:

echo $PATH

Sie können Folgendes an der Eingabeaufforderung ausführen, um anzuzeigen, wo Ihre Shell das betreffende Programm findet:

which prog

Wenn Sie Python aktualisieren möchten, empfehle ich, es an demselben Speicherort zu installieren, an dem es bereits vorhanden ist. Wenn Sie mehr als eine Version gleichzeitig auf Ihrem Computer installieren möchten, ist die Installation in / usr / local / bin eine logische Wahl, IMO.

YWCA Hello
quelle
Das sollte passieren, aber wenn du rennst gitund löschen Sie es dann von usr/binEs scheint nicht erneut zu suchen. Es versucht einfach weiter zu rennen /usr/bin/git.
vonhogen
Probieren Sie eine neue Shell aus, um zu überprüfen, ob sie nicht zwischengespeichert wurde. Sie können auch printenv verwenden, um zu überprüfen, ob in Ihrer Umgebung etwas Seltsames vor sich geht
0

Soweit ich weiß, durchsucht ein Programm beim Ausführen die Ordner in Ihrer $ PATH-Variablen, die durch ":" getrennt ist, z.

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin

Ist Ihr $ PATH richtig eingestellt? Um dies herauszufinden, verwenden Sie:

echo $PATH

Sie können auch verwenden welche Python, um herauszufinden, welche Version und von wo es ausgeführt wird. Ich glaube, dies ist auch eine Suche von links nach rechts, sodass das erste Programm mit dem Namen python verwendet wird, das auf dem Pfad gefunden wird.

Jim
quelle
0

Anstatt zu benutzen

which prog

Sie können den eingebauten Bash verwenden

type -P prog

# some examples using: type -P cmd
$(type -P prog) arg1 arg2 arg3 ...
myls=$(type -P ls) && $myls -l

Weitere Informationen finden Sie unter

help type

# The -P flag forces a PATH search for each NAME, even if it is an alias,
# builtin, or function, and returns the name of the disk file that would
# be executed.

Eine weitere Möglichkeit könnte sein, es zu versuchen

help command
command -p prog

HTH


quelle