Übergeben der Ausgabe von „locate“ als Argument an einen Editor

Übergeben der Ausgabe von „locate“ als Argument an einen Editor

Was ich meine, ist, dies in einem 1-Zeilen-Text zu tun:

ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh

Ich kann nicht die richtige Verrohrung dafür finden

Antwort1

Einfache, aber begrenzte Lösungen

Wenn auf Ihrem System nur die Datei mit dem Namen vorhanden ist filename.sh, funktioniert dies wahrscheinlich

gedit "$(locate filename.sh)"

Oder, wie Hennes anmerkt, wenn der Dateiname in Ihrem PATH enthalten ist:

gedit "$(which filename.sh)"

Bei beiden gibt es noch ein weiteres Problem: Die Shell entfernt nachfolgende Zeilenumbrüche aus der Befehlsersetzung $(...). Im pathologischen Fall, dass Ihr Dateiname mit Zeilenumbrüchen endet, schlägt dies also fehl.

Allgemeine Lösung

Um diese Probleme zu vermeiden, versuchen Sie:

locate -0 "filename.sh" | xargs --null gedit

geditDadurch wird für jede gefundene Datei eine Registerkarte geöffnet .

Die -0Option gibt an, locateeine durch Nullen getrennte Liste von Dateinamen zurückzugeben. Die --nullOption gibt an, xargsihre Eingabe als durch Nullen getrennte Liste zu interpretieren. Folglich funktioniert dies mit Dateinamen mit Zeilenumbrüchen oder anderen schwierigen Zeichen.

Der Einfachheit halber können Sie die folgende Shell-Funktion erstellen:

lge() { locate -0 "$@" | xargs --null gedit; }

Und verwenden Sie es als:lge filename.sh

Um die Funktionsdefinition dauerhaft zu machen, platzieren Sie sie in Ihrem ~/.bashrc.

verwandte Informationen