3 Wege, um Ihren Pfad auf der Kommandozeile zu bearbeiten

Die PATH Umgebungsvariable ist einer der wichtigsten Teile bei der Verwendung der Kommandozeile unter Linux. Auf einem modernen System ist sie oft eine sehr lange Reihe von Verzeichnissen, die alle durch Doppelpunkte getrennt sind. Wenn Sie ein Element in Ihrem Pfad ändern wollen, kann es lästig sein, viele verschiedene Verzeichnisnamen eingeben und bearbeiten zu müssen, um alles richtig zu machen. Zum Glück gibt es ein paar Möglichkeiten, dies zu vereinfachen. Das Gleiche gilt für jede Umgebungsvariable, und die meisten der Werkzeuge, die ich Ihnen zeige, funktionieren für jede von ihnen.

Übersicht

Wie bei den meisten Dingen in Linux gibt es viele Wege, um an Ihr Ziel zu gelangen. Auch wenn ich gesagt habe, dass es drei Möglichkeiten gibt, gibt es wahrscheinlich unendlich viele, und hier ist eine, die ich nicht zu den drei Möglichkeiten zähle: Verwenden Sie die Erweiterung.

Dies funktioniert jedoch nur, wenn Sie etwas an den Anfang oder das Ende einer Variablen anfügen wollen. Nehmen wir zum Beispiel an, Sie wollen ~/foo zu PATH hinzufügen:

# add to the end:
PATH="$PATH:~/foo"
# add to the start:
PATH="~/foo:$PATH"

Das ist einfach, aber es hilft nicht, wenn Sie etwas in der Variablen löschen oder ändern wollen. Es hilft auch nicht, wenn Sie die Reihenfolge einiger vorhandener Verzeichnisse ändern wollen.

Methode 1: Der schwierigste Weg

Angenommen, Sie befinden sich in einem GUI-Terminal, haben Sie wahrscheinlich eine Möglichkeit, Text auszuschneiden und einzufügen. Es scheint also einfach zu sein, zu schreiben:

echo $PATH

Dann können Sie den Text aufheben und in einer neuen Befehlszeile PATH=" eingeben und den Rest des Textes einfügen. Nehmen Sie Ihre Änderungen vor, schließen Sie das Anführungszeichen und drücken Sie Enter. Man könnte meinen, dass das keine große Verbesserung ist, wenn man den vorhandenen Text bearbeiten muss, aber es stellt sich heraus, dass man mit der Taste CONTROL+X, CONTROL+E in der Bash ein schönes Editor-Fenster erhält, in dem man seinen Befehl bearbeiten kann. Das funktioniert mit jedem Befehl und ist sehr nützlich, wenn man eine lange Befehlszeile aus der History zieht, die man korrigieren muss.

Woher weiß die Bash, welchen Editor sie verwenden soll? Die EDITOR Umgebungsvariable. Wenn Sie den Editor, der standardmäßig aufgerufen wird, nicht mögen, ändern Sie Ihre Startdatei (z.B. .bashrc), um die Variable zu setzen:

EDITOR=nano

Das ist gut, aber wir können es besser machen. Schließlich müssen Sie bei dieser Methode die Variable anzeigen, etwas manuell eingeben und dann kopieren und einfügen.

Methode 2: envedit/pathedit

Auf GitHub finden Sie Skripte für envedit und pathedit. Dies sind einfache Skripte, die Sie auf Ihrem System an einem Ort ablegen können, an dem sie gefunden werden können (z. B. /usr/local/bin). Wenn Sie möchten, dass sie im Pfad gefunden werden, sollten Sie sie ausführbar machen (chmod 755).

Das Problem ist, dass alle Änderungen, die ein Skript an der Umgebung vornimmt, nicht erhalten bleiben, nachdem das Skript beendet wurde (siehe den Abschnitt Was ist die Umgebung?, unten). Daher müssen Sie diese Dateien mit Quellcode versehen, damit sie funktionieren. Das Skript pathedit bearbeitet die Datei PATH in Ihrem Lieblingseditor, während envedit einen Variablennamen benötigt und die gleiche Aufgabe übernimmt:

# use . or source for these scripts
. pathedit
# or
source pathedit
. envedit PULSE # edit $PULSE

Es ist lästig, immer daran denken zu müssen, die Quellen anzugeben, daher haben die Skripte eine besondere Funktion. Wenn Sie den Quelltext einmal in Ihrer .bashrc angeben und das Argument alias übergeben, richten die Skripte einen Alias für sich selbst ein, so dass die Eingabe von pathedit oder envedit ausreicht, um den Quelltext zu erzeugen:

. pathedit alias # now just typing pathedit will work

Wie üblich verwendet das Skript $EDITOR, um zu wissen, welchen Editor es verwenden soll. Wenn Sie einen speziellen Editor nur für diesen Zweck wollen, setzen Sie $PATHEDIT_EDITOR oder $ENVEDIT_EDITOR und es wird die üblichen Einstellungen außer Kraft setzen. Wenn dies nicht gesetzt ist, sucht das Skript nach $EDITOR und $VISUAL, bevor es auf vi zurückgreift.

Methode 3: envedit2/pathedit2

Die dritte Methode befindet sich ebenfalls auf der gleichen GitHub-Seite. Der Vorgang ist genau derselbe wie bei Methode 2. Das heißt, Sie legen die Dateien immer noch irgendwo ab und rufen sie mit dem Argument alias auf, um sie einzurichten. Allerdings verwenden diese Skripte nicht Ihren Texteditor. Stattdessen laden sie den Bash-Befehlszeilenpuffer mit der korrekten zu bearbeitenden Zeichenkette. Dies ist der ersten Methode sehr ähnlich, mit dem Unterschied, dass die Schritte für Sie automatisiert werden.

Beachten Sie, dass diese Skripte beim Ausführen einen Alias für envedit oder pathedit einrichten, so dass Sie die beiden nicht benutzen, außer wenn Sie sie einrichten. Das bedeutet auch, dass das zuletzt eingerichtete Programm „gewinnt“. Sie können nicht beide gleichzeitig einrichten, es sei denn, Sie führen eine Skriptoperation durch oder richten Ihre eigenen Aliase ein.

Wenn Sie eines dieser Skripte ausführen, sehen Sie vielleicht ein seltsames Escape-Zeichen vor der Eingabeaufforderung erscheinen. Das ist die Statusmeldung, die das Füllen des Puffers auslöst. Es ist harmlos und wenn es Sie stört, drücken Sie einfach CONTROL+L, um den Bildschirm neu zu zeichnen.

Das sind Ihre drei

Wenn Sie nur diese Skripte benutzen wollen, sind Sie fertig. Ich hoffe, Sie finden sie nützlich. Wenn Sie sich nicht dafür interessieren, wie und warum das alles funktioniert, können Sie hier aufhören. Aber wenn Sie mehr darüber wissen wollen, warum diese Skripte Aliase sind und wie die Umgebung funktioniert, lesen Sie weiter.

Was ist die Umgebung?

Sie können sich die Umgebung als eine kleine Datenbank vorstellen, die jedem Programm übergeben wird. Zum Beispiel haben Sie wahrscheinlich eine Umgebungsvariable namens EDITOR, die normalerweise auf etwas wie vi, emacs oder nano eingestellt ist. Wenn ein Programm einen Texteditor aufrufen muss, findet es durch Auslesen dieser Umgebungsvariablen heraus, welchen Editor Sie gerne verwenden.

Wenn ein Programm A ein anderes Programm (B) startet, erhält das untergeordnete Programm eine Kopie der Umgebung, obwohl Programm A Änderungen daran vornehmen könnte, bevor es B startet. Allerdings sind alle Änderungen, die B vornimmt, nur für B und alle von ihm gestarteten Programme gültig.

Praktisch bedeutet dies, dass nichts, was Sie in einem gestarteten Programm tun, Auswirkungen auf andere Programme hat, die nicht von diesem Programm gestartet wurden. Dies ist ein echtes Problem bei Shell-Skripten. Nehmen wir zum Beispiel an, Sie wollten ein Skript schreiben, das ~/foo an das Ende von PATH anhängt. Das wird nicht funktionieren:

#!/bin/bash
# Bad example
PATH="$PATH:~/foo"

Das Problem ist, dass das Skript in seiner eigenen Kopie der Bash ausgeführt wird. Es wird pflichtgemäß die Variable PATH ändern und sich dann beenden, wodurch die neue Kopie von PATH verschwindet. Natürlich würde die Änderung auch für jeden anderen Teil des Skripts gelten. Damit dies funktioniert, müssen Sie das Skript source (und dann braucht es die #!-Zeile nicht, obwohl es nicht schadet, sie zu lassen). Angenommen, der Name des obigen Skripts wäre foopath. Man könnte sagen:

source ./foopath
# or the same thing:
. ./foopath

So funktionieren einige der erwähnten Skripte, indem sie in die Shell eindringen und die aktuelle Umgebung der Shell verändern können.

Das ist alles, wirklich… außer

Wenn Sie es bis hierher geschafft haben, herzlichen Glückwunsch. Ich hoffe, Sie finden diese Werkzeuge nützlich und melden Sie Fehler auf GitHub.

Bonusrunde

Ich sagte bereits, dass manuelles Ausschneiden und Einfügen der schwierigste Weg ist. Es gibt jedoch noch eine andere Möglichkeit, dies zu tun. Wenn Sie /etc/inputrc oder ~/.inputrc richtig eingerichtet haben, können Sie Folgendes eingeben (aber nicht die Eingabetaste drücken):

PATH=$PATH

Dann drücken Sie Alt+Steuerung+E und die Shell wird die Variable $PATH für Sie erweitern. Wenn Sie jedoch versuchen:

PATH="$PATH"

Sie werden sehen, dass beim Erweitern die Anführungszeichen verloren gehen. Sie müssen das Unmögliche tun:

PATH=\"$PATH\"

Drücken Sie dann Alt+Control+E. An der Ausgabe von bind -P können Sie erkennen, ob die Funktion shell-expand-line an etwas gebunden ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.