Ich möchte in ~ / .bashrc ein paar Verzeichnisse zu meinem $ PATH hinzufügen.
Mein $ PATH ist ziemlich lang, daher ist es etwas schwierig zu erkennen, welche Verzeichnisse es enthält und in welcher Reihenfolge.
Ich weiß, dass ich mein ~ / .bashrc so ändern kann, dass es:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
es würde das Lesen erleichtern. Aber ich habe mich gefragt, ob Bash in den letzten Jahren eine Syntax entwickelt hat, die es einfacher macht, einen langen Pfad anzugeben. Ich fantasiere zum Beispiel von einer Syntax ähnlich der folgenden:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Ich weiß, dass eine solche Syntax ungültig ist. Ich habe mich gefragt, ob es etwas gibt, das so einfach ist. Gibt es?
PATH=foo:$PATH
scheint falsch, weil es jedes Mal das Wachstum beibehältsource ~/.bashrc
und sogarexec bash
nicht anders kann, als es$PATH
istexport
.Antworten:
Ich verwende eine Reihe von praktischen Funktionen, um einer Variablen einen Pfad voranzustellen oder anzufügen. Die Funktionen befinden sich im Distribution-Tarball für Bash in einer Contrib-Datei mit dem Namen "pathfuncs".
Wenn Sie als zweites Argument eine Variable angeben, wird diese anstelle von PATH verwendet.
Der Einfachheit halber sind sie hier:
Wenn Sie diese zu Ihrer Bash-Startdatei hinzufügen, können Sie Ihren PATH folgendermaßen hinzufügen:
Oder geben Sie eine andere Variable an:
Ich verwende diese Methode in meinen rc-Dateien, indem ich die pre_paths als erstes und die add_paths als zweites setze. Dadurch sind alle meine Pfadänderungen auf einen Blick leicht zu verstehen. Ein weiterer Vorteil ist, dass die Zeilen so kurz sind, dass ich bei Bedarf einen abschließenden Kommentar zu einer Zeile hinzufügen kann.
Und da es sich um Funktionen handelt, können Sie diese interaktiv über die Befehlszeile verwenden, indem
add_path $(pwd)
Sie beispielsweise das aktuelle Verzeichnis zum Pfad hinzufügen.quelle
del_path .
).OK, ich habe die folgende Lösung gefunden, die ich für elegant halte (was die Shell-Syntax angeht). Es verwendet die Array-Syntax von Bash und bietet auch eine übersichtliche Möglichkeit , Elemente zu verbinden:
WARNEN!
Es stellt sich heraus, dass diese Lösung ein Problem hat : Im Gegensatz zu den Lösungen von @terdon und @Starfish wird nicht zuerst geprüft, ob sich die Pfade bereits in PATH befinden. Da ich diesen Code also in ~ / .bashrc (und nicht in ~ / .profile) einfügen möchte, werden sich doppelte Pfade in PATH einschleichen. Verwenden Sie diese Lösung also nicht (es sei denn, Sie fügen sie in ~ / .profile ein (oder besser ~ / .bash_profile, da sie eine Bash-spezifische Syntax hat).
quelle
PATH
um tatsächlich Leistungsprobleme zu verursachen (insbesondere, da die Shell erfolgreiche Suchvorgänge im Cache speichert).Ich benutze die unten stehende Funktion in meinem
~/.bashrc
. Es ist etwas, das ich von einem Sysadmin in meinem alten Labor bekommen habe, aber ich glaube nicht, dass er sie geschrieben hat. Fügen Sie einfach diese Zeilen zu Ihrem~/.profile
oder~/.bashrc
:Dies hat verschiedene Vorteile:
$PATH
ist trivialpathmunge /foo/bar
:;pathmunge /foo/bar
oder am Ende (pathmunge /foo/bar
nach) des$PATH
.Die Initialisierungsdatei Ihrer Shell würde dann etwa Folgendes enthalten:
quelle
grep
.eval
sodass Sie ernsthaften Schaden anrichten können, wenn Sie ihn mit dem falschen Argument ausführen.grep
, siehe bugzilla.redhat.com/show_bug.cgi?id=544652#c7Ich möchte in ~ / .bashrc ein paar Verzeichnisse zu meinem $ PATH hinzufügen.
Ich benutze folgendes in Cygwin. Es sollte in anderen Versionen von Bash funktionieren. Sie können das entfernen
unset PATH
, um auf Ihrem aktuellen aufzubauenPATH
(wenn Sie dies tun, müssen Sie möglicherweise herausfinden, wie Sie die:
Trennzeichen korrekt hinzufügen ).Hinweis:
bash
Funktion, verlor sie aber nach einem Festplattenabsturz.In meinem
.bash_profile
:...
In
~/.path_elements
:quelle
Ich verwende dies in meinem .bashrc (und auch in meinem .zshrc, da ich normalerweise zsh verwende, sofern verfügbar, anstelle von bash). Zugegeben, es erfordert das manuelle Hinzufügen von Verzeichnissen. Ein Vorteil ist jedoch, dass ich beim Aktualisieren weiterhin auf neue Server kopieren kann und mir keine Sorgen machen muss, dass der Pfad auf einem neuen Server mit Verzeichnissen erstellt wird, die dort nicht vorhanden sind.
Ich mache dasselbe für meinen MANPATH:
Dieser Ansatz verfügt nicht nur über eine einzelne Datei, die ich auf Systeme in unterschiedlichen Umgebungen kopieren kann, ohne befürchten zu müssen, dass nicht vorhandene Verzeichnisse zum PATH hinzugefügt werden, sondern bietet auch den Vorteil, dass ich die Reihenfolge festlegen kann, in der Verzeichnisse im PATH angezeigt werden sollen. Da die erste Zeile jeder Definition die PATH-Variable vollständig neu definiert, kann ich meine .bashrc-Datei aktualisieren und nach der Bearbeitung als Quelle verwenden, damit meine Shell aktualisiert wird, ohne doppelte Einträge hinzuzufügen (was ich vor langer Zeit erlebt habe, als ich einfach mit " $ PATH = $ PATH: / new / dir ". Dadurch wird sichergestellt, dass ich eine saubere Kopie in der von mir gewünschten Reihenfolge erhalte.
quelle
d="/usr/share/man" ; [ -d "$d" ] && MANPATH="$MANPATH:${d}"
Es ist kürzer und einfacher, ein neues Verzeichnis hinzuzufügen (kopieren Sie einfach eine Zeile und bearbeiten Sie den ersten Teil "d = ...."). Für den PATH-Befehl denke ich jedoch, dass Sie viel zu viele Verzeichnisse in Ihrem PATH haben werden, was nicht immer gut ist (was ist, wenn auf einem der weniger bekannten Pfade ein "foo" -Befehl vorhanden ist und Sie etwas ganz anderes tun das, was ein normaler Benutzer erwarten würde?)Es gibt einen einfachen Weg! Lesen Sie Shell-Funktionen und Pfadvariablen im Linux Journal , 1. März 2000 Von Stephen Collyer
Mit den Funktionen kann ich in meiner Bash-Umgebung einen neuen Datentyp verwenden - die durch Doppelpunkte getrennte Liste. Zusätzlich zu PATH verwende ich sie zum Anpassen von LOCATE_PATH, MANPATH und anderen sowie als allgemeinen Datentyp in der Bash-Programmierung. So richte ich meinen PATH ein (mithilfe der Funktionen):
Da der Link zum Linux-Journal als "defekt" bezeichnet wird, habe ich die Bash-Pfadfunktionen in einer .shar-Datei unter http://pastebin.ubuntu.com/13299528/ abgelegt.
quelle