Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 是否可以擦除或覆盖zsh';s prexec()错误行为?_Git_Zsh - Fatal编程技术网

Git 是否可以擦除或覆盖zsh';s prexec()错误行为?

Git 是否可以擦除或覆盖zsh';s prexec()错误行为?,git,zsh,Git,Zsh,我最近发现了zsh中的preexec()和precmd()函数,并提出了一种新的方法来使用shell中的挤压功能 此prexec()函数用于检查您刚刚尝试运行的“命令” 以“http”开头,以“.git”结尾,如果是,它将自动cd到我的源目录并签出源代码。所以我只是把它粘贴进去,按回车键,就可以开始比赛了。否则,任何正常(或错误)都应该看起来正常 function preexec() { [[ "$1" =~ "^http.*.git\$" ]] && cd /usr/loc

我最近发现了zsh中的preexec()和precmd()函数,并提出了一种新的方法来使用shell中的挤压功能

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

function preexec() {
  [[ "$1" =~ "^http.*.git\$" ]] && cd /usr/local/src && git clone "$1"
}
现在让我陷入困境的是,似乎没有任何方法可以忽略或覆盖您得到的“无法找到命令”错误

zsh:没有这样的文件或目录:

我尝试覆盖“1”,ZLE\u LINE\u中止,使用noglob翻转2>&1,返回1,0。。等等,运气不好


任何zsh smarties都知道如何抑制错误消息?

正确答案是不要使用pre*函数,而是使用命令\u not\u found\u handler函数。这也适用于较新版本的bash

谢普纳和扬·克鲁格为解决这一问题所做的努力值得赞扬

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

看起来,在执行preexec()时,shell已经试图找到要执行的命令,因此您看到的行为有一定的意义。在zsh的命令行编辑器中将其作为一个完成函数实现可能会更幸运。当然,这使得界面略有不同,但这也许不是一件坏事。它甚至可以作为zle line finish小部件,但我没有这方面的经验。感谢您的关注,我还没有考虑将其作为基于完成的任务。我猜如果我粘贴它并点击tab,则其笔划数与粘贴并点击enter相同p您可能希望使用
命令\u not\u found\u handler
而不是
preexec
,因为您希望运行的是某个内容而不是URL,而不是URL.Hm之前的内容。我尝试了一些简单的方法,比如
command\u not\u found\u handler(){print$1;return 0;}
,如果缺少的命令是URL,则似乎不会调用它
zsh
似乎在确定URL是一个缺少的命令名之前试图访问该URL。@chepner我也尝试过,在一个稍微修改的版本中(在这个注释的末尾),它成功了,zsh 5.0.2。可能是其他什么东西正在拦截您的设置中的URL?在zsh的文档中,我没有看到任何提示URL在默认情况下以任何方式尝试作为命令的内容
command_not_found_handler(){[[“$1”=~”^(https | git |(git\\+)?ssh)://.\\\\\.git\$”]|返回1;echo$1;返回0}
这个问题与您的问题相关。你能检查一下吗?