Linux Befehlszeilen-Navigationshinweise/Tricks 3 – die Umgebungsvariable CDPATH

Im ersten Teil dieser Serie haben wir den cd – Befehl ausführlich diskutiert, und im zweiten Teil haben wir uns eingehend mit den push und popd Befehlen sowie den Szenarien, in denen sie sich als nützlich erweisen, beschäftigt.

In Fortsetzung unserer Diskussion über die Aspekte der Befehlszeilen-Navigation werden wir in diesem Tutorial die Umgebungsvariable CDPATH anhand leicht verständlicher Beispiele diskutieren. Wir werden auch einige Details im Voraus besprechen, die sich auf diese Variable beziehen.

Aber bevor wir fortfahren, ist es erwähnenswert, dass alle Beispiele in diesem Tutorial auf Ubuntu 14.04 mit Bash Version 4.3.11(1) getestet wurden.

Die Umgebungsvariable CDPATH

Selbst wenn Ihre Kommandozeilenarbeit darin besteht, alle Operationen unter einem bestimmten Verzeichnis – z.B. Ihrem Heimatverzeichnis – durchzuführen, müssen Sie beim Wechseln von Verzeichnissen auch absolute Pfade angeben. Betrachten Sie zum Beispiel eine Situation, in der ich mich im Verzeichnis /home/himanshu/Downloads befinde:

$ pwd
/home/himanshu/Downloads

Und die Anforderung ist, in das Verzeichnis /home/himanshu/Desktop zu wechseln. Um das zu tun, muss ich normalerweise entweder laufen:

cd /home/himanshu/Desktop/

oder

cd ~/Desktop/

oder

cd ../Desktop/

Wäre es nicht einfach, wenn ich einfach den folgenden Befehl ausführen könnte:

cd Desktop

Ja, das ist möglich. Und hier setzt die Umgebungsvariable CDPATH an, mit der Sie das Basisverzeichnis für den Befehl cd definieren können.

Wenn Sie versuchen, den Wert auszudrucken, werden Sie feststellen, dass diese env-Variable standardmäßig leer ist:

$ echo $CDPATH
$

Nun, in Anbetracht des Falles, den wir bisher diskutiert haben, verwenden wir diese Umgebungsvariable, um /home/himanshu als Basisverzeichnis für den Befehl cd zu definieren.

Der einfachste Weg, dies zu tun, ist:

export CDPATH=/home/himanshu

Und jetzt kann ich das tun, was ich früher nicht tun konnte – aus dem Verzeichnis /home/himanshu/Downloads heraus den Befehl cd Desktop erfolgreich ausführen.

$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$

Das bedeutet, dass ich nun eine CD in jedes beliebige Verzeichnis unter /home/himanshu einfügen kann, ohne explizit /home/himanshu oder ~ oder ../ (oder mehrere ../)im cd-Befehl anzugeben.

Zu beachtende Punkte

Sie wissen also, wie wir die Umgebungsvariable CDPATH verwendet haben, um einfach zu/von /home/himanshu/Downloads von/zu /home/himanshu/Desktop zu wechseln. Betrachten Sie nun eine Situation, in der – im Verzeichnis /home/himanshu/Desktop – sich ein Unterverzeichnis mit dem Namen Downloads befindet, und in dem letzteres liegt, wo Sie wechseln möchten.

Aber plötzlich merkt man, dass das Erstellen eines CD-Desktops einen nach /home/himanshu/Desktop führt. Also, um sicher zu gehen, dass das nicht passiert, tust du es:

cd./Downloads

Während es kein Problem mit dem oben genannten Befehl an sich gibt, ist das eine zusätzliche Anstrengung Ihrerseits (wie auch immer es wenig sein mag), besonders wenn man bedenkt, dass Sie dies jedes Mal tun müssen, wenn eine solche Situation eintritt. Eine elegantere Lösung für dieses Problem kann sein, die Variable CDPATH ursprünglich wie folgt zu setzen:

export CDPATH=“.:/home/himanshu“.

Das bedeutet, dass Sie dem Befehl cd sagen, dass er zuerst nach dem Verzeichnis im aktuellen Arbeitsverzeichnis suchen und dann versuchen soll, das Verzeichnis /home/himanshu zu durchsuchen. Natürlich hängt es ganz von Ihrer Präferenz oder Anforderung ab, ob Sie möchten, dass sich der cd-Befehl so verhält oder nicht – meine Idee hinter der Diskussion dieses Punktes war es, Sie wissen zu lassen, dass diese Art von Situation auftreten kann.

Wie Sie inzwischen verstanden haben, ist der Wert der Variablen CDPATH env – oder der darin enthaltene Satz von Pfaden – die einzige Stelle auf dem System, an der der Befehl cd nach Verzeichnissen sucht (außer natürlich die Szenarien, in denen man absolute Pfade verwendet). Es liegt also ganz bei Ihnen, sicherzustellen, dass das Verhalten des Befehls konsistent bleibt.

Weiter geht es, wenn es ein bash-Skript gibt, das den cd-Befehl mit relativen Pfaden verwendet, dann ist es besser, zuerst die Umgebungsvariable CDPATH zu löschen oder zu deaktivieren, es sei denn, es ist in Ordnung, in unvorhergesehenen Problemen gefangen zu sein. Alternativ können Sie die Umgebungsvariable in Ihrer Datei.bashrc nach dem Testen auf interaktive/nicht interaktive Shells setzen, um sicherzustellen, dass die von Ihnen vorgenommene Änderung nur in interaktiven Shells berücksichtigt wird.

Die Reihenfolge, in der die Pfade im Wert der Umgebungsvariablen erscheinen, ist ebenfalls wichtig. Wenn beispielsweise das aktuelle Verzeichnis vor /home/himanshu aufgelistet ist, dann sucht der cd-Befehl zuerst nach einem Verzeichnis im aktuellen Arbeitsverzeichnis und geht dann weiter zu /home/himanshu. Wenn der Wert jedoch „/home/himanshu:.“ ist, dann wird die erste Suche in /home/himanshu durchgeführt und danach das aktuelle Verzeichnis. Unnötig zu sagen, dass dies Auswirkungen auf die Arbeit des cd-Befehls hat und Probleme verursachen kann, wenn Sie die Reihenfolge der Pfade nicht kennen.

Denken Sie immer daran, dass die Umgebungsvariable CDPATH, wie der Name schon sagt, nur für den Befehl cd funktioniert. Das bedeutet, dass du im Verzeichnis /home/himanshu/Downloads den Befehl cd Desktop ausführen kannst, um in das Verzeichnis /home/himanshu/Desktop zu wechseln, aber du kannst kein ls machen. Hier ist ein Beispiel:

$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$

Es könnte jedoch einige einfache Abhilfemaßnahmen geben. Zum Beispiel können wir das, was wir wollen, mit minimalem Aufwand auf folgende Weise erreichen:

$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~

Aber ja, es gibt vielleicht nicht für jede Situation einen Workaround.

Ein weiterer wichtiger Punkt: Wie Sie vielleicht bemerkt haben, erzeugt der Befehl bei Verwendung des cd-Befehls mit der Umgebungsvariablen CDPATH den vollständigen Pfad des Verzeichnisses, in das Sie in der Ausgabe wechseln. Unnötig zu sagen, dass nicht jeder diese Informationen jedes Mal haben möchte, wenn er den cd-Befehl auf seiner Maschine ausführt.

Um sicherzustellen, dass diese Ausgabe unterdrückt wird, können Sie den folgenden Befehl verwenden:

alias cd='>/dev/null cd'

Der vorgenannte Befehl schaltet die Ausgabe stumm, wenn der cd-Befehl erfolgreich ist, ermöglicht aber die Ausgabe der Fehlermeldungen, wenn der Befehl fehlschlägt.

Schließlich, falls Sie ein Problem haben, bei dem Sie – nach dem Setzen der Umgebungsvariablen CDPATH – nicht die Tab-Vervollständigung der Shell verwenden können, dann können Sie versuchen, die Bash-Vervollständigung zu installieren und zu aktivieren – mehr dazu hier.

Fazit

Die Umgebungsvariable CDPATH ist ein zweischneidiges Schwert – wenn sie nicht mit Vorsicht und vollständigem Wissen verwendet wird, kann sie Sie in einigen komplexen Fallen landen, die viel Zeit und wertvolle Zeit in Anspruch nehmen, um gelöst zu werden. Das bedeutet natürlich nicht, dass Sie es nie ausprobieren sollten; bewerten Sie einfach alle verfügbaren Optionen und wenn Sie zu dem Schluss kommen, dass die Verwendung von CDPATH eine große Hilfe wäre, dann machen Sie weiter und verwenden Sie es.

Hast du CDPATH wie ein Profi benutzt? Hast du noch ein paar Tipps zu teilen? Bitte teilen Sie Ihre Gedanken in den Kommentaren unten mit.

Das könnte Dich auch interessieren …