在 macOS 终端上搜索命令历史记录

Searching your command history on macOS terminal

在 macOS 终端中搜索我的命令历史记录的快捷方式是什么?

历史可供搜索多长时间?它存储在哪里?

如何使用 Ctrl+R 在 [=14= 中的 Terminal 实用程序中搜索] 用于搜索命令历史记录,

dudeOnMac: freddy$ whoami
freddy
(reverse-i-search)`who': whoami

控制 history 保留多长时间取决于一些 shell 环境变量,HISTFILESIZE 只不过是您要保留的历史行数.在.bash_profile中为其设置一个巨大的值使其生效

HISTFILESIZE=10000000 

命令历史记录存储在您的主文件夹下一个名为 .bash_history 的隐藏文件中。要在 nano 中查看它的内容,请在终端中使用以下命令:

nano ~/.bash_history

或使用您的文本编辑器打开(默认为 TextEdit):

open ~/.bash_history

在我的例子中,这是一个很长的列表,当我滚动浏览时,似乎最后一个 ~500 命令存储在这里。

要查看或调用最近使用的命令,您只需按向上箭头键即可依次回读存储在 .bash_history.

中的历史记录

使用 Ctrl + R 在终端中搜索历史命令。

(reverse-i-search)`': 

键入您要搜索的命令的任何子字符串,例如grep

(reverse-i-search)`grep': grep "XYZ" abc.txt

它将return匹配您输入的最新命令。如果这不是您要搜索的命令,请继续按 Ctrl + R 进行下一次匹配,直到找到您的命令。

找到命令后,按 Return 执行它。

如果您想在 运行 没有任何命令的情况下退出,请按 Ctrl + G

PS: 这个答案与 Inian 的建议相同,只是提供了更多细节以便于使用。

从 Unix 和 Linux Stack Exchange 上的 this answer 迁移到 SO 的答案:

ctrl+R将打开历史搜索向后。现在开始输入您的命令,这将给出第一个匹配项。通过再次(一次又一次)按 ctrl+R,您可以循环浏览历史记录。

如果你喜欢超级懒惰,你可以绑定 up/down 箭头键来执行这个搜索,我在我的 .inputrc 中有以下将 up/down 箭头键绑定到history-search-backwardhistory-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

只需键入一些内容(可选),然后按 up/down 箭头键在历史记录中搜索以您键入的内容开头的命令。

要在 .bashrc 而不是 .inputrc 中执行此操作,您可以使用:

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

使用这个命令-

  history

这适用于 OSX 和 Linux。

历史存储在 ~/.zsh_history 或 ~/.bash_history 或 ~/.history 中,具体取决于您的 shell.

根据您的系统,历史记录可存储 1000 或 2000 行。

 echo $HISTSIZE

对于那些想从历史中搜索特定命令的人,您可以使用reverse-i-search。反向搜索允许您输入作为您要查找的命令的一部分的任何关键字,然后 reverse search 导航回历史记录,逐步匹配以前的命令并 return 整个命令。

当一个人不记得他们经常使用的所有方便冗长的命令时,它特别有用。要进行反向搜索 ctrl + R 并键入您拥有的任何线索,这将 return 您之前的命令与您键入的单词相匹配。然后一旦找到命令,点击 Enter 直接从搜索中执行它。

为了方便搜索历史,我建议你安装fzf

It's an interactive Unix filter for command-line that can be used with any list; files, command history, processes, hostnames, bookmarks, git commits, etc.

只需安装它,单击 ctrl + R,您将滚动浏览 shell 历史记录,无需 grep 或等待年龄直到弹出您正在等待的命令。

支持MacOS,Linux甚至Windows.

对于 macOS Big Sur,文件现在是 .zsh_history

如果您在终端中执行 vi ~/.zsh_history,您可以通过按 / 然后按搜索词来使用正则表达式。

# USAGE: find.history cd
# filter commands in shell history by a search term and execute the selected command
function find.history {
  eval $(history | grep "" | tail | awk '{=""}1' | tail -r | peco)
}

您需要安装 peco

https://github.com/peco/peco

[$]> brew install peco

Automation AppleScript

由于您提到通过 Terminal.app 查看您的历史记录是一种快速解决方案。您可能想要自动化或快速查看历史记录,也许是从码头。您可以使用 AppleScript 应用程序作为一种替代方法。与许多其他方法一样,这是创建简单快捷方式的可选方法。

  1. 打开 AppleScript 编辑器应用程序。
  2. 为历史记录添加您指定的命令。
  3. 代码
tell application "Terminal"
        do script "history"
end tell
  1. 另存为应用程序,为了方便拖到停靠。

History Storage & Time Stored Details

HISTSIZE 确定将多少行写入历史文件。

HISTFILESIZE 确定文件的长度。

找出历史存储了多长时间:

echo $HISTSIZE $HISTFILESIZE

注意:您还可以在两个变量的长度上增加您的命令历史记录存储大小。您可以通过位于 ~/.bash_profile 文件中的 HISTSIZEHISTFILESIZE 环境变量来实现。

可以通过修改~/.bash_profile来实现,数字占位符SIZE代表的是数字,行值,例如:

export HISTFILESIZE=SIZE # Example 1000
export HISTSIZE=SIZE # Example 10000

Pre macOS 11 Big Sur

cat ~/.bash_history

HISTFILESIZE 将仅设置一个最大历史值,该值在会话启动时存储到历史文件中。 HISTSIZE 将具体确定将存储多少行,或者换句话说,在会话的 end 处写入。如果集合 HISTFILESIZE 被确定为比集合 HISTSIZE 大的值,您将不会查看大于集合 HISTSIZE 的历史记录。原因是 history 文件被 HISTSIZE 覆盖,除非使用 histappend 选项打开 ON.

您也可以使用 histappend 来附加历史记录,如果 histappend shell 选项打开,行将附加到历史文件。否则,覆盖的替代方案继续进行。

Bash GNU - histappend

macOS 11 Big Sur

nano ~/.zprofile

修改history环境变量,设置为一个值:

export HISTFILESIZE=1000
export HISTSIZE=SIZE=1000

运行 source 命令可用于将任何函数文件加载到当前 shell 脚本或命令提示符中。

source ~/.zprofile
echo $HISTSIZE $HISTFILESIZE

输出:

1000 1000

存储一些历史记录的输出:

cat ~/.zsh_history

您也可以尝试以下方法:

history | grep 'git'

其中 'git' 是您要查找的命令。