我正在尝试创建一个允许我查看历史记录的小型zsh函数 - hgrep test
应该返回我输入的每个命令test
。
在我的机器上它只返回大约6个结果。当我输入history | grep test
时,我会得到 lot 更多结果。什么给了?
hgrep (){
history | grep $1
}
输出 - 这已经完成了!
➜ ~ hgrep test
7887 mkd test
7889 rm -r test
7894 hgrep test
7896 history | grep test
这是输出不完整。另外,请注意,第一批结果很多之前
➜ ~ history | grep test
252 cp mgroup /test
254 cp mgroup /test
322 vi test.js
324 node test.js
325 vi test.js
...
经过一番探讨之后,行为的差异似乎与.zshrc的来源有关。在新终端上我看到了不受欢迎的行为。如果我然后source ~/.zshrc
它的工作原理。
但是,我仍然感到困惑,为什么会发生这种情况。
答案 0 :(得分:2)
在history
函数的定义之后,您的alias
命令似乎fc -l 1
被其他内容(例如hgrep
)编辑。
因此,您可以在hgrep
设置之后添加alias
函数定义。
或者,您可以定义不受别名,shell选项等影响的hgrep
函数(以及任何函数)。
TL; DR
命令history
默认列出最后16个事件。
history
与
fc -l
相同。
[...]
fc -l ... [ first [ last ] ]
如果未指定 first ,则将其设置为-1(最近的事件),如果给出-l标志,则设置为-16。
在读取时检查并扩展别名。
检查shell输入中的每个符合条件的单词以查看是否存在 为它定义的别名。如果是这样,它将被别名的文本替换 如果它处于指挥位置
[...]
读入代码时会扩展别名;整行阅读一次
似乎hgrep
函数使用shell-builtin命令history
,它只显示一些事件,结果可能与使用history
(alias
不同以交互方式进行其他事情。
hgrep
功能将由source ~/.zshrc
重新定义,此时此功能中的history
将被展开/替换为alias
。
您可以通过发出以下命令来检查结果函数:
% functions hgrep
hgrep () {
…
(hgrep function's definition will be shown)
答案 1 :(得分:0)
这些命令完全不同。
history | grep test
列出包含字符串test
的所有历史事件。
history test
在历史记录中返回以字符串test
开头的最新命令,并列出所有后续命令。