Abfrage
Ich benutze Bash. Wenn ich nach Dateien suche, mache ich oft Folgendes:
find -name stackexchange.hs
Und oft sehen die Ergebnisse so aus:
/youre/the/man/now/dog/stackexchange.hs
/you/are/no/longer/the/dog/dog/stackexchange.hs
/this/is/the/file/i/want/stackexchange.hs
Dann möchte ich einen der folgenden Schritte ausführen:
- Option 1: Öffnen Sie das letzte Element in der Ergebnisliste in vim .
- Option 2: Öffnen Sie das n-te Element in der Ergebnisliste in vim .
Derzeit schneide und füge ich mit der Maus ein. Was mich zu meiner Frage bringt :
- Gibt es einen einfachen Einzeiler, um die Optionen 1 und 2 zu erreichen? Beachten Sie, dass dies nach dem
find
Befehl erfolgt. - Gibt es eine Möglichkeit, N-Linien von stdout in einer Art Bash-Vektor / Array zu erfassen?
Ideale Verwendung
$ find -name am_i_really_all_alone.txt
./borges/library/you_are_not_alone.txt
./borges/library/am_i_really_all_alone.txt
$ vim (N)
(Syntax und Semantik können unterschiedlich sein, aber Sie verstehen es)
Similaria
Es scheint mehrere ähnliche Fragen zu geben. Hier sind meine wahrgenommenen Unterschiede (ich bin offen für Erleuchtung):
- "Open File Found with find Command" konzentriert sich auf das Erstellen einer einzeiligen Datei, von der aus ein Dateiname
find
invim
(oder was auch immer) weitergeleitet wird. In meinem Fall möchte ichfind
zuerst pfeifen, später (sozusagen). Meine Erfassung / Verwendung erfolgt ausschließlich danach . - "Letzte Ausgabe von Befehl Lind wiederverwenden" scheint knallhart zu sein, scheint aber den Befehl einfach zu wiederholen und spricht nicht für die Erfassung der N-ten Ausgabezeile. Ehrlich gesagt macht es mir Angst.
- "Capture Multi-Line Output eines Bash Builtin" ist nah, aber nicht ganz da.
- "Was ist der genaue Unterschied zwischen Terminal, Shell, Tty, Konsole usw." Dieser ist wirklich nur eine gute Lektüre.
Danke für deine Hilfe! Nachdem ich als Teenager in den 90ern * nix / BSD verwendet habe und Angst hatte, indem ich meinen Burnout-Nachbarn anrief, um Treiber für meine Plug-and-Play-Soundkarte zu installieren, bin ich erleichtert, über Befehle zu sprechen. Linienminutien mit (wahrnehmbar) weniger beängstigenden Personen. Es fühlt sich gut an, zurück zu sein.
quelle
vim $(command |tail -n1)
.Antworten:
Hier ist eine mögliche Lösung für Ihr Problem, die bei funky Dateinamen einigermaßen (aber nicht perfekt) sicher sein sollte (behandelt Dateinamen mit Zeilenvorschüben nicht - wahrscheinlich behebbar, aber möglicherweise lauern andere Probleme).
Zwei Funktionen, die erste wird
find
mit den Parametern ausgeführt, die Sie übergeben, speichern die Ausgabe in einem Array und zeigen sie an. Der zweite ist nur ein Helfer für den Zugriff auf dieses Array.Anwendungsfall:
Anführungszeichen sind nicht erforderlich,
$(myget index)
wenn Sie keine Leerzeichen oder andere störende Zeichen in Ihren Dateinamen haben.Überträgt die gesamte Ausgabe
find
in Ihre Umgebung, was möglicherweise eingeschränkt ist. (Die Verwendung einer temporären Datei anstelle dieses Arrays würde das lösen, hat jedoch andere Probleme - insbesondere die gleichzeitige Verwendung mehrerer Shells.)quelle
Ich habe das in meinem
.screenrc
:Grundsätzlich wird auf dem Bildschirm ¬1die Zeile über dem Cursor ¬2eingefügt, die zweite Zeile über dem Cursor eingefügt ... und so weiter. Möglicherweise möchten Sie mehr für Zeilen 10 und höher hinzufügen, aber ich finde, dass ich bereits nach ungefähr 7 lieber die Maus oder den Kopiermodus verwenden möchte,
screen
als die Anzahl der Zeilen zu zählen, um die gewünschte zu erhalten.quelle
Eine andere Lösung ist: Sie können ein interaktives Skript schreiben, das automatisch nach Ihrer Wahl fragt. Hier ist der Code für interaktives Skript:
Speichern Sie dieses Skript mit einem beliebigen Namen, sagen Sie "autofind", und rufen Sie das Skript mit Ihrem "find command" auf. Als Argument gibt es hier den Code zum Aufrufen des Skripts:
Bevor Sie das Skript verwenden, überprüfen Sie Ihren "Suchbefehl", ob er ein Ergebnis liefert oder nicht. Wenn ein Ergebnis angezeigt wird, verwenden Sie nur das Skript
quelle
Mats Antwort war genau das, wonach ich gesucht habe. Ich habe seinen Code ein wenig erweitert, um mehr Get-Optionen zu ermöglichen.
.
quelle