Wiederverwendung Ausgabe vom letzten Befehl in der Bash
Ist die Ausgabe des einen Bash-Befehl, gespeichert in irgendeinem register? E. g. etwas ähnliches $?
erfassen der Ausgabe statt der exit-status.
Konnte ich weisen Sie die Ausgabe in eine variable mit:
output=$(command)
aber das ist mehr eingeben...
InformationsquelleAutor memecs | 2014-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese:
$(!!)
neu berechnen lassen (nicht wieder verwenden) die Ausgabe des letzten Befehls.
Den
!!
auf seine eigenen führt den letzten Befehl.$(your_cmd)
durch die Verwendung von backticks:`your_cmd`
Gemäß der Gnu Bash-manual, Sie sind funktional identisch. Natürlich ist dies auch das Thema der Warnung, die von aufgeworfenen @memecsIn der Praxis ist die Ausgabe der Befehle deterministisch ist, so würde ich nicht quälen es recomputing. Es ist sicherlich hilfreich, wenn Sie etwas tun wollen, wie
git diff $(!!)
wo der Vorherige Befehl wurde einfind
Aufruf.InformationsquelleAutor ling
Die Antwort ist Nein. Bash nicht zuordnen jeder Ausgang eines beliebigen Parameters oder jeder block auf seine Speicher. Zudem sind Sie nur erlaubt, um Zugang Bash durch seine erlaubt interfacing-Vorgänge. Bash die privaten Daten nicht zugänglich ist, wenn Sie es zu hacken.
Sicher nicht. Check-ladbare Module. Sehen Sie, wenn Sie schreiben können.
InformationsquelleAutor konsolebox
Einen Weg, dies zu tun ist durch die Verwendung
trap DEBUG
:Nun zuletzt ausgeführten Befehl stdout und stderr werden in
/tmp/out.log
Einzige Nachteil ist, dass es ausgeführt wird, einen Befehl zweimal: einmal zum umleiten der Ausgabe und Fehler zu
/tmp/out.log
und einmal normal. Wahrscheinlich gibt es irgendeine Möglichkeit um dieses Verhalten zu verhindern, wie gut.rm -rf * && cd ..
, nicht nur das aktuelle Verzeichnis, sondern auch die übergeordneten dir gelöscht?? dieser Ansatz scheint sehr gefährlich für michNun, wie Mach ich das rückgängig-Aktion?
Nur tun
trap '' DEBUG
InformationsquelleAutor anubhava
Wenn Sie auf mac, und nicht den Geist speichern Sie Ihre Ausgabe in die Zwischenablage, statt zu schreiben, um eine variable, die Sie verwenden können, pbcopy und pbpaste als workaround.
Zum Beispiel, statt dies zu tun, um eine Datei zu suchen und diff den Inhalt mit einer anderen Datei:
Könnte man dies tun:
Den string
/var/bar/app/one.php
ist in die Zwischenablage, wenn Sie führen Sie den ersten Befehl.Durch die Art und Weise, pb in
pbcopy
undpbpaste
stehen für Pappe, ein synonym für die Zwischenablage.$ find app -name 'one.php' | xclip $ diff $(xclip -o) /var/bar/two.php
interessant, ich hätte nie gedacht, der mit
pbpaste
zusammen mit Kommando-substitution.InformationsquelleAutor Raghu Dodda
Inspiriert durch anubhava die Antwort, die ich denke, ist eigentlich nicht akzeptabel, wie es läuft jeden Befehl zweimal.
Diese Weise die Ausgabe des letzten Befehls in /tmp/Letzte und der Befehl nicht zweimal aufgerufen.
grep
odergit diff
+1 trotzdem obwohlInformationsquelleAutor olivecoder
Wie konsolebox sagte, Sie hätte zu hacken bash selbst. Hier ist ein sehr gutes Beispiel, wie könnte man dies erreichen. Die stderred repository (eigentlich gedacht für färben stdout) gibt die Anweisungen, wie es zu bauen.
Gab ich es versuchen: Definieren von einigen neuen Datei-Deskriptor innerhalb
.bashrc
wie(Zahl ist beliebig), und ändern Sie
stderred.c
entsprechend, so dass der Inhalt auch wird geschrieben, fd 41. Es Art von gearbeitet, aber enthält Lasten des NUL-bytes, seltsame Formatierungen und ist im Grunde binären Daten, die nicht lesbar sind. Vielleicht jemand mit guten Absprachen der C könnte versuchen, das herauszufinden.Wenn das so ist, alles, was benötigt wird, um die zuletzt gedruckten Zeile ist
tail -n 1 [logfile]
.InformationsquelleAutor Blauhirn
Nicht sicher, was genau Sie benötigen diese, so ist diese Antwort nicht relevant sind. Speichern Sie immer die Ausgabe eines Befehls:
netstat >> output.txt
, aber ich glaube nicht, dass das, was Sie suchen.Gibt es natürlich auch Optionen obwohl; du könntest einfach ein Programm zum Lesen der text-Datei nach oben, der Befehl ausgeführt und verbinden Sie diese mit einer Variablen, die in Ruby, meine Sprache der Wahl, können Sie eine variable erstellen aus der Ausgabe des Befehls mit 'backticks':
Dieser Stick in einem .rb-Datei und führen Sie es:
ruby file.rb
und es wird eine variable erstellen, den Befehl und ermöglichen es Ihnen, um es zu manipulieren.InformationsquelleAutor user4493605
Ich habe eine Idee, die ich nicht haben Zeit, um zu versuchen, sofort umsetzen.
Aber was, wenn Sie etwas wie die folgende:
Könnte es Probleme mit dem IO-Puffer. Auch wird die Datei möglicherweise zu groß. Man hätte zu kommen mit einer Lösung für diese Probleme.
InformationsquelleAutor William Navarre