我最近在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智能手机都知道如何压制错误消息?
答案 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
}