【发布时间】:2017-06-06 10:50:12
【问题描述】:
在 macOS 终端中搜索我的命令历史记录的快捷方式是什么?
历史记录可用于搜索多长时间?它存储在哪里?
【问题讨论】:
在 macOS 终端中搜索我的命令历史记录的快捷方式是什么?
历史记录可用于搜索多长时间?它存储在哪里?
【问题讨论】:
如何使用 Ctrl+R 在 Mac 中的 Terminal 实用程序上搜索命令历史记录,
dudeOnMac: freddy$ whoami
freddy
(reverse-i-search)`who': whoami
控制history 的保留时间取决于几个shell 环境变量,HISTFILESIZE 这只不过是您想要保留的历史行数。在.bash_profile中设置一个巨大的值让它生效
HISTFILESIZE=10000000
【讨论】:
ctrl+R 显示的是最后一个,但多次点击ctrl+R 会显示之前的匹配项。
使用Ctrl + R 从终端的历史记录中搜索命令。
(reverse-i-search)`':
键入您要搜索的命令的任何子字符串,例如grep
(reverse-i-search)`grep': grep "XYZ" abc.txt
它将返回与您的输入匹配的最新命令。如果这不是您要搜索的命令,请继续按 Ctrl + R 进行下一次匹配,直到找到您的命令。
找到命令后按Return 执行它。
如果你想在不运行任何命令的情况下退出,请按Ctrl + G
PS:这个答案与 Inian 建议的相同,只是提供了更多细节以方便使用。
【讨论】:
命令历史存储在您的主文件夹下名为 .bash_history 的隐藏文件中。要在 nano 中查看它的内容,请在终端中使用以下命令:
nano ~/.bash_history
或使用文本编辑器打开(默认为 TextEdit):
open ~/.bash_history
就我而言,这是一个很长的列表,当我滚动浏览时,似乎最后一个 ~500 命令存储在这里。
【讨论】:
在 Unix 和 Linux Stack Exchange 上将答案从 this answer 迁移到 SO:
按 ctrl+R 将打开历史搜索向后。现在开始输入您的命令,这将给出第一个匹配项。通过再次按下 ctrl+R,您可以循环浏览历史记录。
如果你喜欢超级懒惰,你可以绑定上/下箭头键来执行此搜索,我在我的.inputrc 中有以下内容将上/下箭头键绑定到history-search-backward 和history-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
只需键入一些内容(可选),然后按向上/向下箭头键即可在历史记录中搜索以您键入的内容开头的命令。
要在.bashrc 而不是.inputrc 中执行此操作,您可以使用:
bind '"\e[A": history-search-backward'
【讨论】:
使用这个命令-
history
这适用于 OSX 和 Linux。
历史记录存储在 ~/.zsh_history 或 ~/.bash_history 或 ~/.history 中,具体取决于您的 shell。
历史记录存储 1000 或 2000 行,具体取决于您的系统。
echo $HISTSIZE
【讨论】:
grep,例如要查找包含字符串“ssh”的命令,请使用> history | grep ssh
您还可以尝试以下方法:
history | grep 'git'
其中 'git' 是您要查找的命令。
【讨论】:
对于那些想要从历史记录中搜索特定命令的人,您可以使用reverse-i-search 进行。反向搜索允许您输入属于您要查找的命令的任何关键字(任何),reverse search 导航回历史记录,逐步匹配先前的命令并返回整个命令。
当人们不记得他们经常使用的所有方便的冗长命令时,它特别有用。要进行反向搜索 ctrl + R 并输入您拥有的任何线索,这将返回与您输入的单词匹配的先前命令。然后一旦找到命令,点击Enter直接从搜索中执行它。
【讨论】:
自动化 AppleScript
既然您提到通过 Terminal.app 查看历史记录是一种快速解决方案。您可能想要自动化或快速查看历史记录,可能从 Dock 中。您可以使用 AppleScript 应用程序作为一种替代方法。与许多其他方法一样,这是一种创建简单快捷方式的可选方法。
tell application "Terminal"
do script "history"
end tell
历史存储和时间存储详情
HISTSIZE 确定要写入历史文件的行数。
HISTFILESIZE 确定文件的长度。
了解历史记录的存储时间:
echo $HISTSIZE $HISTFILESIZE
注意:您还可以在两个变量的长度中增加命令历史存储大小。您可以通过位于您的~/.bash_profile 文件中的HISTSIZE 和HISTFILESIZE 环境变量来实现这一点。
可以通过修改~/.bash_profile来实现,带有SIZE的数字占位符代表的是数字,以行值为例:
export HISTFILESIZE=SIZE # Example 1000
export HISTSIZE=SIZE # Example 10000
macOS 11 Big Sur 之前的版本
cat ~/.bash_history
HISTFILESIZE 只会设置一个最大历史值,该值会在会话开始时存储到历史文件中。 HISTSIZE 将具体确定将存储多少行,或者换句话说,写入会话的结束。如果确定集合HISTFILESIZE 的值大于设置的HISTSIZE,则您将不会查看大于集合HISTSIZE 的历史记录。原因是 history 文件被 HISTSIZE 覆盖,除非使用 histappend 选项打开 ON。
您也可以使用histappend 来附加历史记录,如果打开了histappend shell 选项,则会将行附加到历史记录文件中。否则,覆盖的替代方案继续进行。
macOS 11 大苏尔
nano ~/.zprofile
修改历史环境变量,设置为一个值:
export HISTFILESIZE=1000
export HISTSIZE=SIZE=1000
运行source 命令可用于将任何函数文件加载到当前shell 脚本或命令提示符中。
source ~/.zprofile
echo $HISTSIZE $HISTFILESIZE
输出:
1000 1000
存储一些历史记录的输出:
cat ~/.zsh_history
【讨论】:
对于 macOS Big Sur,该文件现在是 .zsh_history
如果您在终端中执行 vi ~/.zsh_history,您可以通过按 / 然后按搜索词来使用正则表达式。
【讨论】:
要查看或调用最近使用的命令,您只需按向上箭头键即可依次回读 .bash_history 中存储的历史记录。
【讨论】:
为了方便搜索历史,我建议你安装fzf。
它是一个交互式 Unix 命令行过滤器,可用于任何列表;文件、命令历史、进程、主机名、书签、git 提交等。
只需安装它,点击ctrl + R,您将滚动浏览您的shell历史,无需grep或等待很长时间直到您等待的命令弹出。
它支持 Mac OS、Linux 甚至 Windows。
【讨论】:
# USAGE: find.history cd
# filter commands in shell history by a search term and execute the selected command
function find.history {
eval $(history | grep "$1" | tail | awk '{$1=""}1' | tail -r | peco)
}
您需要安装peco。
[$]> brew install peco
【讨论】: