1

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

此 prexec() 函数检查您刚刚尝试运行的“命令”是否以“http”开头并以“.git”结尾,如果是,它将自动 cd 到我的源目录并检查源代码。所以我只是把它粘贴进去然后按回车键就可以参加比赛了。否则,任何正常(或错误)都应该看起来正常。

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 smarties 都知道如何抑制错误消息?

4

1 回答 1

2

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

感谢@chepner 和@"Jan Krüger" 为解决这个问题所做的努力。

function command_not_found_handle {
        if [[ "$1" =~ "^(https|http|git|(git\\+)?ssh)://.*\$" ]]; then
                echo "Do something: $1"
                return 1
        else
                return 0
        fi
}
于 2013-11-21T17:26:36.463 回答