Suche nach einem vorherigen Befehl mit demselben Präfix, wenn ich an einer Shell-Eingabeaufforderung die Nach-oben-Taste drücke

Suche nach einem vorherigen Befehl mit demselben Präfix, wenn ich an einer Shell-Eingabeaufforderung die Nach-oben-Taste drücke

Da ich aus der FreeBSD-Welt komme, möchte ich, dass sich das Linux-Terminal wie das von FreeBSD verhält, insbesondere die Version 9.1. Grundsätzlich cdkönnen Sie, wenn Sie in das Terminal tippen und die Aufwärtspfeiltaste drücken, alle Befehle im Verlauf durchsuchen, beginnend mit, cdwodurch Sie viel Zeit sparen.

Ich weiß nicht, wie ich diese Funktion in Linux, Debian oder CentOS aktivieren kann, da ich sonst das Ganze eintippen muss. Kann mir bitte jemand helfen?

Antwort1

Fügen Sie Folgendes hinzu ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Erläuterung

~/.inputrcist die Konfigurationsdatei fürGNU Readline. Viele Shells, einschließlich bashund tcshverwenden readline zum Bearbeiten der Befehlszeile. Die beiden obigen Zeilen weisen readline an, seine Verlaufssuchfunktion aufzurufen, wenn die Escape-Sequenzen für die Aufwärtspfeiltaste ( \e[A) und die Abwärtspfeiltaste ( \e[B) gefunden werden.

Antwort2

Was passiert ist, dass FreeBSD und Linux standardmäßig unterschiedliche Shells verwenden. FreeBSD verwendet standardmäßigtcsh, das früher bessere interaktive Funktionen als Bash hatte (aber Bash hat aufgeholt), aberdeutlich schlechtere Scripting-Funktionen.

Der einfachste Weg, die gewohnte Umgebung wiederherzustellen, besteht darin, Ihre Shell unter Linux auf tcsh umzustellen. Vorausgesetzt, tcsh ist systemweit installiert (wenn nicht, bitten Sie Ihren Systemadministrator, es zu installieren), führen Sie es aus, chsh -s tcshum Ihre Standard-Shell zu ändern.

Alternativ können Sie Bash so einrichten, dass Sie diesen gewohnten Befehl haben. Standardmäßig navigieren die Pfeile Upund Downzwischen allen Befehlen im Verlauf, nicht nur zwischen denen, die mit dem von Ihnen eingegebenen Präfix beginnen. Um dies auf das gewohnte Verhalten zu ändern, fügen Sie die folgenden Zeilen in die Initialisierungsdatei von Bash ein, die sich .bashrcin Ihrem Home-Verzeichnis befindet. Führen Sie . ~/.bashrceine neue Shell aus oder starten Sie sie, um die Initialisierungsdatei erneut zu lesen.

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

Die Escape-Sequenzen sind das, was Ihr Terminal an die Shell sendet, wenn Sie eine Pfeiltaste drücken. Upkann je nach Terminal \eOA(Escape, O, A) oder sein, und das Gleiche gilt für .\e[ADown

Standardmäßig bietet Bash verschiedene Tastenkombinationen zum Durchsuchen des Befehlsverlaufs. Sie können Ctrl+ drücken Rund dann einige Zeichen eingeben, um nach einem Befehl zu suchen, der diese Teilzeichenfolge irgendwo in der Zeile enthält. Drücken Sie Ctrl+ S, um vorwärts statt rückwärts zu gehen. Die Suche ist inkrementell (d. h. während der Eingabe); Alt+ Pund Alt+ Nermöglichen eine nicht inkrementelle Suche.

Anstelle von bash und tcsh können Sie auf zsh umsteigen, dashat einige nette Funktionen, die in anderen Shells nicht zu finden sind. Zsh hat standardmäßig Ctrl+ Rund Ctrl+, genau wie Bash. Um und zu erhalten , wie Sie es in tcsh hatten, fügen Sie die folgenden Zeilen ein :SUpDown~/.zshrc

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Wenn Sie überall dieselbe Shell verwenden möchten, können Sie unter FreeBSD auch bash oder zsh verwenden, sofern der Port installiert ist (fragen Sie auch hier Ihren Systemadministrator).

Antwort3

tcshist für die meisten Linux-Distributionen verfügbar. Versuchen Sie, das tcshPaket zu installieren und es dann auszuführen, chsh -s /bin/tcshum es zu Ihrer Standard-Shell zu machen.

verwandte Informationen