在macOS终端中搜索命令历史记录的快捷方式是什么?
历史可供搜索多长时间?它存放在哪里?
答案 0 :(得分:31)
如何使用 Ctrl +
R 搜索Terminal
中的Mac
实用程序,以搜索命令历史记录,
dudeOnMac: freddy$ whoami
freddy
(reverse-i-search)`who': whoami
很好地控制history
将保留多长时间,这取决于几个shell
环境变量HISTFILESIZE
,这只是您想要保留的历史记录行数。在.bash_profile
中为其设置一个巨大的值,以使其生效
HISTFILESIZE=10000000
答案 1 :(得分:13)
使用Ctrl
+ R
从终端中的历史记录中搜索命令。
(reverse-i-search)`':
键入要搜索的命令的任何子字符串,例如grep的
(reverse-i-search)`grep': grep "XYZ" abc.txt
它将返回与您的输入匹配的最新命令。如果这不是您要搜索的命令,请继续按Ctrl
+ R
进行下一场比赛,直至找到您的命令。
找到命令后,按Return
执行命令。
如果您想在不运行任何命令的情况下退出,请按Ctrl
+ G
PS:这个答案与Inian建议的相同,只是提供了更多细节以便于使用。
答案 2 :(得分:6)
命令历史记录存储在您的主文件夹下的名为 .bash_history 的隐藏文件中。要以nano格式查看其内容,请在终端中使用以下命令:
nano ~/.bash_history
或者使用文本编辑器打开(默认为TextEdit):
open ~/.bash_history
在我的情况下,它是一个非常长的列表,当我滚动时,似乎最后的~500命令存储在这里。
答案 3 :(得分:3)
在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'
答案 4 :(得分:3)
使用此命令-
history
这在OSX和Linux上均可使用。
根据您的shell,历史记录存储在〜/ .zsh_history或〜/ .bash_history或〜/ .history中。
根据您的系统,历史记录可存储1000或2000行。
echo $HISTSIZE
答案 5 :(得分:1)
对于那些想从历史记录中搜索特定命令的人,可以使用reverse-i-search
进行。反向搜索允许您键入要查找的命令中包含的任何关键字(任何),然后{ {1}}导航回历史记录,不加区别地匹配先前的命令,然后返回整个命令。
当人们不记得他们经常使用的所有冗长冗长的命令时,它特别有用。要进行反向搜索reverse search
+ ctrl
并输入任何线索,这将返回与先前命令匹配的您输入的单词。然后找到命令后,点击R
以直接从搜索中执行它。
答案 6 :(得分:1)
对于 macOS Big Sur,文件现在是 .zsh_history
如果您在终端中执行 vi ~/.zsh_history ,则可以通过按 / 然后按搜索词来使用正则表达式。
答案 7 :(得分:1)
自动化 AppleScript
因为您提到通过 Terminal.app 查看历史记录是一种快速解决方案。您可能想要自动化或快速查看历史记录,也许是从 Dock 中进行的。您可以使用 AppleScript 应用程序作为一种替代方法。与许多其他方法一样,这是创建简单快捷方式的可选方法。
tell application "Terminal"
do script "history"
end tell
历史存储和时间存储详细信息
HISTSIZE
确定将写入历史文件的行数。
HISTFILESIZE
确定文件的长度。
找出历史记录的存储时间:
echo $HISTSIZE $HISTFILESIZE
注意:您还可以增加两个变量长度的命令历史存储大小。您可以通过位于 HISTSIZE
文件中的 HISTFILESIZE
和 ~/.bash_profile
环境变量来实现这一点。
可以通过修改~/.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
答案 8 :(得分:0)
要查看或调出最近使用过的命令,只需按向上箭头键即可顺序读回存储在.bash_history中的历史记录。
答案 9 :(得分:0)
要轻松搜索历史记录,建议您安装fzf
。
这是一个交互式Unix命令行过滤器,可以与任何列表一起使用;文件,命令历史记录,进程,主机名,书签,git commit等。
只需安装它,单击ctrl
+ R
,您将滚动浏览shell历史记录,而无需进行grep
或等待一段时间直到您输入命令等待弹出。
它支持Mac OS,Linux甚至Windows。
答案 10 :(得分:0)
# 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