Wie erhalte ich das Durchsuchen des Pfeil-nach-unten-Verlaufs in Bash in Mac OS X Terminal?

2

In fast allen modernen Befehlszeilenumgebungen, die ich verwendet habe, können Sie den Pfeil nach oben drücken, um einige Befehle in Ihrem Verlauf zurückzugehen und einen früheren Befehl erneut auszuführen. In einigen Befehlszeilenumgebungen, die ich verwendet habe, können Sie an der nächsten Eingabeaufforderung danach auch den Abwärtspfeil drücken, um den Verlauf an der Stelle zu durchsuchen, an der der vorherige Befehl im Verlauf angezeigt wurde.

Angenommen, Sie tun Folgendes:

$ vi mysource.c  
$ make  
$ make test  

Angenommen, Ihr Test schlägt fehl und Sie möchten diese Schritte erneut ausführen. Drücken Sie also dreimal den Aufwärtspfeil, um zu zurückzukehren vi mysource.cund traf Rückkehr das laufen zu lassen. Bei der nächsten Eingabeaufforderung danach möchte ich in der Lage sein, den Abwärtspfeil einmal zu drücken, um zu gelangen make. Und bei der nächsten Eingabeaufforderung danach möchte ich einmal den Abwärtspfeil drücken, um zu gelangen make test.

Ich weiß nicht, ob es sich um die Standardeinstellung von Mac OS X handelt bash Einstellungen oder Standardeinstellungen für Terminal.app oder was, aber diese Funktion ist standardmäßig nicht aktiviert.

Ich habe das durchgesehen bash(1) Manpage und gefunden:

       forward-search-history (C-s)

...aber ^S schien nichts zu tun. Ich bin mir nicht sicher, ob es von Terminal als Old School verschluckt wurde XOFF oder so etwas (obwohl es nicht zu pausieren schien Terminal-Ausgabe).

Ein paar andere Anmerkungen:

  • Ich verwende Mac OS X Snow Leopard 10.6.6.
  • Ich kenne bereits viele andere unterhaltsame Möglichkeiten, mit der Shell-Historie zu arbeiten. Es ist nur diese eine Sache, die ich gerade zu bearbeiten versuche.
  • Obwohl alle Hinweise in die richtige Richtung hilfreich wären, funktionieren die bekannten Lösungen auf 10.6.x. bash in Terminal.app wäre super extra hilfreich.
Spiff
quelle
"In fast allen modernen Befehlszeilenumgebungen, die ich verwendet habe" Enthält das Bash auf einer anderen Plattform? d. h. wissen Sie, dass sich Bash so verhalten kann? Weil ich das noch nie gesehen habe. Nach-unten-Pfeile (und ^ s) funktionieren, sobald Sie mit Nach-oben-Pfeilen (oder ^ r) im Verlauf navigiert haben, aber ich kann mich nicht erinnern, eine Option gefunden zu haben, mit der Bash verfolgt, welcher Verlaufsbefehl beim vorherigen ausgeführt wurde Befehlszeile.
Chris Page
1
@ Chris Beachten Sie, dass ich sagte, fast alle haben Pfeil nach oben Geschichte, aber etwas Ich habe die Form eines Abwärtspfeils, nach dem ich suche. Wie ich mich erinnere, hat die Windows-Eingabeaufforderung dies und ich bin sicher, dass tclsh unter Windows dies hat. Ich bin mir nicht sicher, ob ich irgendwo traditionelle Unix-Shells gesehen habe, aber ich würde mir Bash unter Windows / Cygwin ansehen, wenn irgendwo. Ich weiß nicht, wie viel von dieser Funktionalität Teil der Shell selbst oder irgendwie Teil des Terminal-Emulators (oder cmd.exe) ist, weil tclsh dies zum Beispiel unter Windows tut, aber anscheinend nicht unter Mac OS X.
Spiff

Antworten:

1

^S macht das Gegenteil von ^R (nachdem du getan hast ^R ). Möglicherweise müssen Sie tun stty -ixon um das zu deaktivieren XOFF Verhalten.

Die nächstgelegene Adresse wird von bereitgestellt ^O (Zeile lesen operate-and-get-next ). Drücken Sie den Aufwärtspfeil, um einen vorherigen Befehl abzurufen, und drücken Sie ^O anstatt Enter. Der Befehl wird ausgeführt. Wenn die Eingabeaufforderung erneut ausgegeben wird, wird der nächste Befehl im Verlauf in die Befehlszeile eingefügt. Sie können Pfeile, Enter oder verwenden ^O An diesem Punkt.

Dennis Williamson
quelle
Das funktioniert überhaupt nicht für mich, obwohl bash bind -p eingebaut sagt mir das C-o ist gebunden an operate-and-get-next. Ich habe es sogar über das Gastkonto versucht, um sicherzustellen, dass ich irgendwann in der fernen Vergangenheit nicht meine Terminal- oder Bash-Umgebung kaputt gemacht habe.
Spiff
2
Egal, das habe ich herausgefunden ^O wurde vom tty als "discard" -Zeichen gefressen. stty discard "^-" behoben. Ich habe die Operate-and-Get-Next-Funktion ausprobiert und festgestellt, dass sie nicht nah genug an dem ist, wonach ich suche. Die Suche geht weiter ...
Spiff
1

Abhängig von Ihrer Version von stty benötigen Sie möglicherweise "stty flush undef". (Derzeit dokumentiert die OS X-Manpage stty "flush", die Ausgabe stty -a zeigt jedoch weiterhin den Wert "discard" an.)

Verwenden Sie ^ o, um einen Befehl aus dem Verlauf auszuführen, wenn Sie glauben, dass Sie auch den nächsten Befehl möchten. Wenn Sie es wollen, wiederholen Sie einfach das ^ o. Wenn Sie es doch nicht wollen, bewegen Sie sich ab diesem Punkt mit ^ p, ^ n, ^ s usw. im Verlauf oder löschen Sie die Befehlszeile mit ^ u.

Jim Van Zandt
quelle