![Übergeben der Ausgabe von „locate“ als Argument an einen Editor](https://rvso.com/image/1428722/%C3%9Cbergeben%20der%20Ausgabe%20von%20%E2%80%9Elocate%E2%80%9C%20als%20Argument%20an%20einen%20Editor.png)
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
gedit
Dadurch wird für jede gefundene Datei eine Registerkarte geöffnet .
Die -0
Option gibt an, locate
eine durch Nullen getrennte Liste von Dateinamen zurückzugeben. Die --null
Option gibt an, xargs
ihre 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
.