Übergeben Sie die Ausgabe eines Befehls als Eingabe an einen anderen

682
techfun

Ich habe eine Datei "portmap" wie folgt im Stammverzeichnis gesucht:

find -name "portmap" 

Es gibt den Ort der Datei an

.init/...somepath./portmap 

Jetzt möchte ich mein aktuelles Verzeichnis in den Ort der Portmap-Datei ändern und das aktuelle Arbeitsverzeichnis ausdrucken.

Ich denke also über die Pipeline an die oben genannte Stelle zur CD. Aber wie kann ich das mit einem Befehl tun?

Bitte helfen

0

2 Antworten auf die Frage

1
DopeGhoti

Vorausgesetzt, dass findnur eine Übereinstimmung für das Suchmuster gefunden wird, können Sie verwenden

cd "$( dirname "$( find -name "portmap" )" )" 

Wenn Sie das in der Ausgabe des vorherigen Befehls aufgezählte Verzeichnis jederzeit ausführen möchten, können Sie verwenden

cd "$( dirname "$(!!)" )" 
Hallo, danke für die Antwort. Aber es gibt mir einen fehlerbasierten Befehl, der nicht gefunden wurde. Ich kopiere einfach die eingefügte Zeile. Funktioniert dies in der Mint-Eingabeaufforderung? Vielen Dank techfun vor 10 Jahren 0
@ Techfun Ich glaube, DopeGhoti bedeutete "Dirname". Sie sollten die Ersetzungen auch in doppelte Anführungszeichen setzen, um zu verhindern, dass Pfade mit Leerzeichen den Befehl beschädigen. slhck vor 10 Jahren 1
Ja, das habe ich gemacht, danke @slhck. Aus irgendeinem Grund bekomme ich jedes Mal die `basename'- und` dirname'-Drähte im Kopf. DopeGhoti vor 10 Jahren 0
Glücklich geholfen zu haben. DopeGhoti vor 10 Jahren 0
-1
joe

Der Befehl xargs ist dafür perfekt, aber der Befehl cd in der Shell spielt nicht gut damit. Also würde ich zurück Zecken verwenden:

cd `find . -type d -name "portmap"` 
Das OP möchte in das Verzeichnis wechseln, in dem sich die Datei "portmap" befindet. Ihr Befehl erreicht das nicht. Beim Ersetzen von Dateipfaden sollten auch doppelte Anführungszeichen verwendet werden. slhck vor 10 Jahren 0