是否可以擦除或覆盖zsh的prexec()错误行为?

时间:2013-11-04 04:30:56

标签: git zsh

我最近在zsh中发现了preexec()和precmd()函数,并提出了一种新颖的方法来使用从我的shell中获取更多功能。

此prexec()函数检查您刚刚尝试运行的“命令” 以'http'开头并以'.git'结尾,如果有,它会自动cd到我的源目录并检查源。所以我只需将其粘贴并按下Enter即可离开比赛。否则,任何正常(或错误)都应该看起来正常。

function preexec() {
  [[ "$1" =~ "^http.*.git\$" ]] && cd /usr/local/src && git clone "$1"
}

现在让我受阻的是,似乎没有任何方法可以忽略或覆盖你得到的'命令无法找到'错误。

  

zsh:没有这样的文件或目录:https://github.com/someproject.git

我尝试覆盖'1',ZLE_LINE_ABORTED,翻转2>& 1,返回1,0,使用noglob ..等等,没有运气。

任何zsh智能手机都知道如何压制错误消息?

1 个答案:

答案 0 :(得分:0)

正确答案不是使用pre *函数而是使用command_not_found_handler函数。这也适用于较新版本的bash。

他们为解决这个问题所做的努力都归功于@chepner和@“JanKrüger”。

function command_not_found_handle {
        if [[ "$1" =~ "^(https|http|git|(git\\+)?ssh)://.*\$" ]]; then
                echo "Do something: $1"
                return 1
        else
                return 0
        fi
}