2010-08-20 6 views
12

In Matlab gibt es eine sehr nette Funktion, die ich mag. Angenommen, ich habe den Befehl very-long-command und danach einige Befehle eingegeben. Später, wenn ich den langen Befehl erneut brauche, tippe ich einfach very ein und drücke die Pfeil-nach-oben-Taste, mein langer Befehl erscheint. Es findet den letzten Befehl, der mit very beginnt. Ich konnte das gleiche in der Unix-Befehlszeile nicht machen, wenn ich es versuche, ignoriert es, was auch immer ich tippte, und geht zu den letzten Befehlen in chronologischer Reihenfolge zurück. Gibt es einen Weg, es zu tun?Matlab-ähnlicher Befehl History Abruf in Unix-Befehlszeile

+0

Matlab hat gute Standardeinstellungen. Ich frage mich immer, warum die Unix-Leute keine guten Standardeinstellungen für diese Dinge bereitstellen können. – compie

Antwort

8

In der bash schlagen ctrl - r lassen Sie eine Geschichte-Suche:

$ echo 'something very long' 
something very long 
$ # blah 
$ # many commands later... 
(reverse-i-search)`ec': echo 'something very long' 

In dem obigen Code-Schnipsel, ich traf ctrl - r auf der nächsten Zeile nach # many commands later... und dann getippt ec, die mich zurück zum Echo-Befehl brachte. An diesem Punkt wird eingeben Geben Sie wird den Befehl ausführen.

+0

Danke! Ich habe noch eine kurze Frage, was ist, wenn zwei kürzlich verwendete lange Befehle mit Echo beginnen, wie kann ich mit dieser Methode zwischen den beiden wechseln? – AgCl

+1

10 @AgCl: [Dieser Blogbeitrag] (http://ronny.haryan.to/archives/2005/03/14/tip-history-search-in-bash/) erklärt, wie man 'history-search-forward' einrichtet 'und' history-search-backward', um durch den Verlauf zu navigieren. –

+0

Der obige Link ist tot –

3

Sie können das Gleiche tun, indem Sie "!" Verwenden. Zum Beispiel:

$ echo "Hello" 
Hello 
$ !echo 
echo "Hello" 
Hello 

Allerdings ist es in der Regel eine schlechte Idee, diese Art der Sache zu tun (was ist, wenn der letzte Befehl tat etwas destruktiv?). Wenn Sie erwarten, dass Sie etwas wiederverwenden, dann schlage ich vor, dass Sie ein Shell-Skript erstellen und es irgendwo speichern (wann immer ich etwas wiederverwenden möchte, erstelle ich ein Skript in ~/.local/bin).

+0

Danke, es ist fast so nah an Matlabs, aber ich kann den ganzen Befehl nicht sehen, bevor ich Enter drücke. Ich werde die Antwort auffrischen, wenn ich genug Wiederholungen habe. – AgCl

+0

! Echo: p zeigt den Befehl (bash sowieso) und Sie können wählen, um es auszuführen oder nicht. –

+0

@Ron, cool. Vielen Dank. –

10

In bash wird diese Funktionalität durch die Befehle history-search-forward und history-search-backward zur Verfügung gestellt, die standardmäßig an keine Schlüssel gebunden sind (siehe here). Wenn Sie

bind '"\e[A":history-search-backward' 
bind '"\e[B":history-search-forward' 

laufen es Pfeil nach oben machen und Pfeil nach unten Suche nach hinten und für die Folge von Zeichen zwischen dem Beginn der aktuellen Zeile und dem Punkt, durch die Geschichte weiter. Siehe auch this related Stack Overflow question.