Ich möchte wissen, wie ich die letzte Ausgabe von der Konsole wiederverwenden kann:
pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.6/site-packages
pv-3:method Xavier$ cd **LASTOUTPUT**
shell
command-line
io-redirection
methodofaction
quelle
quelle
/dev/tty
wurde. Es sollte jedoch möglich sein, alle anstdout
oder gesendeten Daten zu erfassenstderr
, die möglicherweise ausreichend sind.Antworten:
Vorausgesetzt, bash:
quelle
`backtick-commands`
!cd $(dirname $(which python))
Hier komme ich!Noch nicht erwähnt, benutze eine Variable:
quelle
cd $dir
Bei allen anderen Lösungen müssen Sie Ihren Workflow ändern oder den Befehl zweimal ausführen. Dies ist möglicherweise nicht geeignet, wenn die Ausführung lange dauert oder nicht wiederholt werden kann (z. B. wenn eine Datei gelöscht wird und ein erneutes Ausführen zu einem anderen Ergebnis führt).
Hier ist eine etwas kompliziertere Idee, wenn Sie sie brauchen:
.bashrc
Bash-Eingabeaufforderung
Dies hat einige Probleme, so ist es nur als Ausgangspunkt gedacht. Beispielsweise kann die Ausgabedatei (
~/<pid>.out
) sehr groß werden und Ihre Festplatte füllen. Außerdem könnte Ihre gesamte Shell aufhören zu funktionieren, wenntee
dies der Fall ist.Es könnte geändert werden, um nur die Ausgabe des vorherigen Befehls mit
preexec
undprecmd
hooks in zsh oder eine Emulation davon in bash zu erfassen , aber das ist hier komplizierter zu beschreiben.quelle
tee
Signalen geschützt (versuchen SieCtrl+C
, einige Befehle zu drücken und auszuführen). Verwenden Sie dasscript
Dienstprogramm, bei dem keines dieser Probleme auftritt.Ein Arbeitsentwurf für eine traditionelle Muschel:
Jetzt können wir den Bildschirm in eine Datei umwandeln. Braucht Sudo.
Apropos
screendump
: Das so genannte Programm funktioniert bei mir nicht mehr. Möglicherweise nur für ältere Kernel. / dev / pts / N hat auch bei mir nicht funktioniert. Möglicherweise müssen Sie einige optionale MKDEV in / dev - Ich erinnere mich dunkel über einige/dev/cuaN
, aber ich kann falsch sein.Wir möchten die Ausgabe weiterleiten, anstatt screen.dump zu verwenden. Aber irgendwie funktioniert es nicht - manchmal wartet es auf ENTER.
Das Capturing ist keine normale Textdatei mit Zeilenumbrüchen, sondern mit beispielsweise 80x50 Zeichen in einer Sequenz.
Um die letzten 2 Zeilen auszuwählen, eine für die Ausgabe des Befehls und eine für die Eingabezeile, mache ich es rückgängig, wähle 160 Zeichen, wieder rückgängig und wähle 80.
Nur für den Fall, dass Sie sich jemals gefragt haben, warum es ein
rev
Programm gibt.Kritik:
Das erste Diagramm wird mit EXPLAIN.PY erstellt
quelle
alias tee2tty='tee $(readlink /proc/$$/fd/1)'
Versuche dies:
quelle
Hier ist eine Antwort:
Wenn Sie unter X ausgeführt werden, wählen Sie die gewünschte Ausgabe mit der Maus aus, um sie zu kopieren, und klicken Sie dann mit der mittleren Maustaste, um sie einzufügen.
Wenn Sie auf einer Textkonsole arbeiten, können Sie mit gpm Ähnliches tun .
quelle
(Es ist leider keine funktionierende Antwort, aber immer noch etwas Merkwürdiges. Jemand, der interessiert ist, könnte versuchen, die Implementierung der Funktion, über die ich Ihnen erzählen werde, abzuschließen.)
In
eshell
Emacs wollten sie eine solche Funktion haben, die jedoch nicht vollständig implementiert ist (was sich jedoch in der Dokumentation widerspiegelt ).Zum Beispiel:
Sie sehen, nur die Ausgabe von Builtins kann in der
$$
Variablen erfasst werden.Aber gut, etwas Elisp-Programmierung (vgl.
eshell-mark-output
Implementierung in "esh-mode.el"), und Sie könnten eine Funktion implementieren, die die letzte Ausgabe "markiert" und sie als Ergebnis der Funktion zurückgibt; Damit Sie diese Funktion in einem von Ihnen angeforderten eshell-Befehl verwenden können, können Sie elisp-Funktionen in eshell-Befehlen mit der üblichen elisp-Syntax verwenden, dh in Klammern wie folgt:quelle
Wenn Sie feststellen, dass Sie die Ausgabe vor dem Treffer wiederverwenden möchten Enter, können Sie sie in einer Variablen speichern: Fügen Sie sie
tmp=$(
am Zeilenanfang und)
am Ende hinzu. (Dies entfernt alle Leerzeilen am Ende der Befehlsausgabe und tatsächlich alle letzten Zeilenumbrüche. Dies ist selten von Bedeutung.)Wenn Ihre Shell ksh oder zsh ist, ist dies eine nützliche Funktion, mit der Sie dies automatisieren können. (Dies ist in bash keine Hilfe, da der letzte Befehl in einer Pipeline in der übergeordneten Shell ausgeführt werden muss, was nur in ksh (nicht in pdksh) und zsh der Fall ist.)
Verwenden Sie es so:
quelle
(Aufbauend auf 4485 Antwort )
Das ist viel Tippen, also mach einen Alias:
Dann rufen Sie einfach an
cd $(python -c ... | tee2tty)
Dies setzt natürlich voraus, dass Sie bereits wissen, was Sie mit der Ausgabe tun möchten, hat aber den Vorteil, dass Sie den Befehl nur einmal aufrufen.
quelle
werde den Trick machen.
Lesen Sie hier für weitere Details: Befehlsersetzung .
quelle
Es gibt eine bessere Lösung:
Drucken
!!
Sie einfach nach dem ausgeführten Befehl und Sie erhalten eine wiederholte Ausgabe.Z.B
Original:
https://askubuntu.com/questions/324423/how-to-access-the-last-return-value-in-bash
quelle
!!
wiederholt nicht das Ergebnis des letzten Befehls, sondern führt den letzten Befehl erneut aus. Wennjot -r 1 0 1000
eine einzelne Zufallszahl zwischen 0 und 1000 zurückgegeben wird539
, gibt running!!
höchstwahrscheinlich eine andere Zahl an , nachdem der Befehl einmal ausgeführt und "get" wurde .!!
Dies kann auch unerwünscht sein, wenn die Ausführung des vorherigen Befehls viel Zeit in Anspruch nimmt oder wenn ein Vorgang wiederholt wird, der nicht wiederholt werden sollte (z. B. das Ändern einer Datei).