当我在 shell 提示符下按 Up 时,搜索具有相同前缀的上一个命令

Abd*_*aou 19 shell bash tcsh command-history zsh

从FreeBSD的世界未来我希望做Linux终端的行为很像FreeBSD的一个,特别是9.1版本,基本上当你输入cd终端,推动“向上”箭头可以浏览历史记录开始的所有命令与cd它让你获得很多时间。

我不知道如何在 Linux Debian 或 CentOS 中启用此功能,这迫使我输入整个内容,有人可以帮忙吗?

Tho*_*man 34

将以下内容添加到~/.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
Run Code Online (Sandbox Code Playgroud)

解释

~/.inputrcGNU readline的配置文件。许多 shell,包括bashtcsh使用 readline 进行命令行编辑。当遇到向上箭头键 ( \e[A) 和向下箭头键 ( \e[B)的转义序列时,上面的两行将告诉 readline 调用其历史搜索功能。


Gil*_*il' 6

发生的事情是 FreeBSD 和 Linux 默认使用不同的 shell。FreeBSD 默认为tcsh,它比过去的 bash 具有更好的交互功能(但 bash 已经赶上)但明显更差的脚本功能

获得您习惯的环境的最直接方法是将您的 shell 切换到 Linux 上的 tcsh。如果 tcsh 是在系统范围内安装的(如果不是,请让您的系统管理员安装它),运行chsh -s tcsh以更改您的默认 shell。

或者,您可以设置 bash 以使用您习惯的此命令。默认情况下,UpDown箭头在历史记录中的所有命令之间导航,而不仅仅是以您输入的前缀开头的命令。要将其更改为您习惯的行为,请将以下几行放在 bash 的初始化文件中,该文件.bashrc位于您的主目录中。运行. ~/.bashrc或启动一个新的 shell 来重新读取初始化文件。

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'
Run Code Online (Sandbox Code Playgroud)

当您按下箭头键时,转义序列是您的终端发送到 shell 的内容。Up可能是\eOA(escape, O, A) 或\e[A取决于您的终端,对于Down.

默认情况下,bash 提供不同的键绑定来搜索命令历史记录。您可以按Ctrl+ R,然后输入一些字符以搜索包含该行任意位置的此子字符串的命令。按Ctrl+S前进而不是后退。搜索是增量式的(即按您类型搜索);Alt+PAlt+N为您提供非增量搜索。

您可以切换到 zsh,而不是 bash 和 tcsh,它具有其他 shell 中没有的一些简洁的功能。Zsh默认有Ctrl+RCtrl+ S,就像 bash 一样。要获得UpDown像在 tcsh 中一样,请将以下几行放入~/.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
Run Code Online (Sandbox Code Playgroud)

如果您想在任何地方使用相同的 shell,您也可以在 FreeBSD 上使用 bash 或 zsh,前提是安装了端口(再次询问您的系统管理员)。