Wie ändere ich die Standardversion einer ausführbaren Unix-Datei?

3494
nipponese

Ich habe derzeit zwei Versionen derselben ausführbaren Datei auf meinem OSX-Computer installiert: Eine befindet sich in usr / bin und die andere ist eine Macports-Installation. Wenn ich ausgeführt werde which, gibt das Terminal die Position an die Version usr / bin zurück. Gibt es eine einheitliche Möglichkeit, die Standardinstallation zu ändern, oder verfügt jede Anwendung über eine eigene Befehlsoption dafür?

3

3 Antworten auf die Frage

7
Daniel Pittman

Sie müssen die PATHUmgebungsvariable ändern . Dies ist der Standard für die Suche nach ausführbaren Dateien unter Unix.

Wenn etwas unter Unix nach einer Anwendung sucht, die über einen relativen Pfad verfügt (z. B .: clanganstatt /usr/bin/clang), PATHwird das :Zeichen aufgeteilt und dann in der Reihenfolge durchsucht.

zB: wenn dein PATHist /opt/local/bin:/bin:/usr/bindann clangsucht /opt/local/bin/clang, und wenn das fehlt /bin/clang, etc.

Technisch gesehen hat jeder Prozess seinen eigenen Weg, dies zu tun - nichts zwingt sie dazu, der Konvention zu folgen $PATH, aber es ist schon lange genug so, dass so ziemlich alles alles tut.

Die andere Überlegung ist, dass jeder Prozess eine eigene Umgebung hat - eine Kopie PATHdavon. Dazu gehört launchd, das für die Benutzeroberfläche und alle darauf gestarteten Anwendungen verantwortlich ist.

So können Sie diese in Ihrem Shell Init - Skripte modifizieren ( .bash_profile, .bashrc, .profile, usw.), aber das wird, wenn nicht funktioniert, zum Beispiel, starten Sie Vim oder Emacs als GUI - Anwendung.

Sie können auch /etc/pathsDateien ändern oder hinzufügen /etc/paths.d, und dies ist Teil der Standardumgebung für alles - einschließlich jeder auf dem Mac gestarteten Anwendung. (Sie müssen sich jedoch abmelden und wieder anmelden, damit alle Teile des Systems durchdrungen werden.)

Um Daniels Antwort hinzuzufügen: MacPort's sollte eine Exportanweisung in Ihrem .profile oder .bash_profile- angehängt haben- es wird folgendermaßen aussehen: export PATH = / opt / local / bin Zeile ist nicht da, fügen Sie es hinzu und starten Sie das Terminal erneut. Sie können auch "echo $ PATH" eingeben, um zu sehen, was aktuell in Ihrer Shell eingestellt ist. InChargeOfIT vor 12 Jahren 0
Ich verstehe das Konzept von $ PATH, aber das beantwortet meine Frage nicht wirklich. Deshalb frage ich mich, ob es falsch ist, mit dem folgenden zu beginnen: / local / sbin: / usr / local / mysql / bin: $ PFAD: / usr / local / git / bin`. Die Standardinstallation von clang ist jedoch beispielsweise in usr / bin. Mir ist nicht klar, wie man die Macports-Installation als Standard erzwingt. nipponese vor 12 Jahren 0
Oh. Ich habe die Antwort aktualisiert, um zu zeigen, wie PATH in der Praxis gesucht wird. Fügen Sie jedoch das Verzeichnis mit den ausführbaren Dateien, die Sie zuvor in PATH bevorzugt haben. Darüber hinaus gibt es auf Unix-Ebene kein Konzept der "Standardanwendung" wie auf der OSX-Benutzeroberflächenebene. Es ist nur "was zuerst auf dem Weg kommt". Daniel Pittman vor 12 Jahren 0
2
Ignacio Vazquez-Abrams

Wenn das Ändern $PATHaus irgendeinem Grund nicht möglich ist, können Sie einen Alias erstellen, der die ausführbare Datei im entsprechenden Verzeichnis aufruft.

0
Gilles Quenot

The PATH variable defines where your commands are.

You may modify this variable in your /etc/paths file. You should verify that /usr/bin is before others.