在zsh的函数中获取egrep上的“没有这样的文件或目录”错误

时间:2014-01-17 17:21:13

标签: grep zsh

我创建了一个小函数,允许我在zsh上查看命令历史记录。命令history 1将显示整个命令历史记录。运行history 1 | egrep ls只显示包含ls的命令。

所以我的功能看起来像这样:

h() {
  if [ -z "$*" ]
  then
    history 1
  else
    history 1 | egrep "$@"
  fi
}

不幸的是,这只会导致以下错误消息:

$ h ls
egrep: ls: No such file or directory

我对我的剧本中的错误感到茫然。我试图grepegrep都无济于事。

3 个答案:

答案 0 :(得分:0)

grepegrep的完整路径是什么?

它可能在备用shell中运行,该shell具有不同的PATH集。尝试使用明确的/usr/bin/grep/usr/bin/egrep,看看是否可以修复任何内容。

答案 1 :(得分:0)

创建一个文件history.zsh(与原始文件略有不同):

#!/bin/zsh
h() {
  if [ -z "$*" ]
  then
    history
  else
    history | fgrep "$*"
  fi
}

现在获取此文件(因此“h”将刷新):

. history.zsh

并调用新函数:

$ h ls
30      h ls
31      ls

答案 2 :(得分:0)

我放弃了这个功能。关于zsh历史主题的进一步阅读使我得到了这个非常优雅的解决方案,满足了我的需求。 https://coderwall.com/p/jpj_6q

简而言之,您将其添加到.zshrc:

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-searc
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down

现在,您可以通过输入部分字词并使用向上或向下箭头键浏览历史记录文件中的匹配项来搜索您的历史记录。