Aktuelle Befehle, die in der Bash-Historie eingegeben wurden

309
borrible

Ist es möglich, die tatsächlichen Befehle abzurufen, die in der Bash-Historie eingegeben wurden? Wenn der Befehl (z. B.) einen historischen Substitutions- oder Änderungswert enthält, wird im Ergebnis der resultierende Befehl und nicht der eingegebene Befehl angezeigt.

Einige Beispiele. Nehmen Sie für beide an, dass der Befehl 123 in der Historie istls Red*

  1. Wenn ich !123die Befehlszeile 123 aus der Historie eingebe und jetzt den neuesten Befehl in meiner Historie anschaue, sehe ich ls Red*eher als !123.

  2. Wenn Sie den integrierten Shell-Befehl verwenden fc -s Red=Blue 123und den Verlauf betrachten, sehe ich ls Blue*eher alsfc -s Red=Blue 123

Wenn ich den Aufwärtspfeil verwende (um die Escape-Sequenz zu erzeugen ^[[A), erhalte ich den erweiterten Befehl und nicht den tatsächlich eingegebenen Text.

In all diesen Beispielen erwarte ich den erwarteten Eintrag in der Historie, was ich erwarte, aber in manchen Fällen wäre es nützlich, den ursprünglich eingetippten Text abzurufen. Obwohl die obigen Beispiele recht einfach sind, verwende ich möglicherweise eine komplexe Substitution, die ich bearbeiten möchte.

Mir ist klar, dass dies nach der Initialisierung der Shell noch komplizierter wird, da HISTFILEdiese Informationen nicht enthalten sind. Es geht mir in diesem Fall nicht darum, den Originaltext abzurufen (obwohl es interessant ist).

0
Dies ist keine wirkliche Antwort auf Ihre Frage, aber wenn Sie sich auf einem Terminal befinden, das Kopieren und Einfügen zulässt (und Sie * noch * angemeldet sind; dh Sie versuchen nicht, die Tastenanschläge, die Sie letzte Woche eingegeben haben, wiederherzustellen), ist dies oft von Vorteil alte Befehle kopieren und einfügen. Wenn ich beispielsweise wiederholt zwischen zwei Befehlen wechseln möchte, tippe ich vielleicht 'ls Red *', `ls Blue * 'und`! -2' -, kopiere dann '! -2' und füge es wiederholt ein. Möglicherweise möchten Sie auch ein Programm namens "screen" betrachten. Scott vor 7 Jahren 0

1 Antwort auf die Frage

1
MAP

Die eigentliche Antwort auf die Frage, die Sie gestellt haben, lautet: "Nein, Bash hat keine solche Funktion". Es war etwas, woran ich vor zehn Jahren nachgedacht hatte, als ich in demselben Gebäude arbeitete wie das GNU-Kernteam. Deshalb ging ich zu ihnen und redete mit ihnen, und anscheinend wäre dies ein PITA (einschließlich der Ermittlung der Syntax und des Speicherns aller) diese zusätzliche Geschichte). Viele Leute würden gelegentlich davon profitieren, aber es gab eine Menge größerer Probleme, die gelöst werden mussten, so dass es unwahrscheinlich war, dass sie behoben wurden.

Auf der anderen Seite habe ich oft festgestellt, dass die Ausschneiden und Einfügen-Funktionen von X11 in fast allen Fällen meinen tatsächlichen Bedürfnissen entsprechen können. Mit der Entdeckung der folgenden XResourceMagie ist es noch besser geworden :

*cutToBeginningOfLine: False 

Wenn Sie wissen, wo sich Ihre XResources befinden, können Sie diese Zeile zu dieser Datei hinzufügen. Wenn Sie das nicht feststellen können, können Sie einfach echo '*cutToBeginningOfLine: False'|xrdb -mergeeine Ihrer Startdateien hinzufügen (z. B. .profilehängt von Ihrer Shell ab).

Was Sie tun, ist dreifach klicken Sie mit der linken Maustaste, kopieren Sie das Wort, auf das Sie zeigen, an das Ende der Zeile (einschließlich der Enter), und Sie können es leicht einfügen. Standardmäßig (dh ohne dieses) kopiert der Dreifachklick die gesamte Zeile einschließlich der Eingabeaufforderung.

Interessante Geschichte, danke. Wissen Sie zufällig, ob das Feature in einer der anderen gängigen Shells vorhanden ist? borrible vor 7 Jahren 0
Nein, ich bin streng eine bash Person. Wenn man die frühen Bash-Entwickler persönlich gekannt hat, hat das vielleicht etwas damit zu tun. MAP vor 7 Jahren 0