如何在zsh中检查命令名称是否为“ find”并在命令提示符之前退出提示符

时间:2019-03-22 08:24:33

标签: shell zsh

有什么可以帮助我吗?

原始

➜  ~ find
here preexec block...
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

我想这样!

➜  ~ find
here preexec block...
haha!find disable by super manager
➜  ~

我试图在zsh.define zshrc中使用preexec precmd hook函数

precmd(){
  # echo 'here precmd block...'
  echo 'here precmd block...'
  if [[ "npm" == "$1" ]];
  then
    echo 'haha 123'
    exit 0
  fi
}

preexec(){
  echo 'here preexec block...'
  if [[ "npm" == "$1" ]];
  then
    echo 'haha 123'
    exit 0
  fi
}

但是结果是杀死了外壳。

1 个答案:

答案 0 :(得分:1)

这是Use preexec() to evaluate entered command

的变体

要点是preexec是在shell的上下文中执行的(因此,如果退出则将杀死shell),它不提供更改或取消正在执行的命令的功能,但是您应该能够进入accept-buffer做你想做的事。

一个更简单的选择是将要禁用的可执行文件简单地别名为其他内容:

> alias find=echo
> find . -name 'foo'
. -name foo

尽管它仅适用于通用查找,不适用于通过/ bin / env或可执行文件路径进行的专门查找。