在特定程序之前执行函数

在特定程序之前执行函数

这始于需要按需添加 SSH 密钥ssh-agend,但由于 OpenSSH 无法做到这一点,所以我想出了这个 zsh 脚本。但由于我无法弄清楚的原因,它不是仅在“之前”ssh或之前运行git,而是在之前运行任何事物,甚至是空命令。

git ssh () {
    # Does the agent handle any keys?
    ssh-add -l &>/dev/null

    # True if last executed command (ssh-add -l) exits non-zero.
    if [ $? -ne 0 ]; then
        ssh-add
    fi

    # Execute git or ssh with all parameters, and not this function
    command $0 "$@"
}

为什么这个函数在每个命令之后执行,而不是仅在输入git或时执行?ssh

答案1

我尝试了该功能zsh -f(我应该在发布之前完成......),并发现它按预期工作。其他原因导致了这个问题,所以我会在可能的情况下关闭这个问题。

编辑:

对于那些对问题是什么以及如何解决感兴趣的人,请参阅下文。

我使用的是zsh框架以星它用于vcs_info检查当前目录是否被 git 使用。这需要调用 git。vcs_info看起来,默认情况下它本身并不直接调用 git。

然而,感谢 Freenode 上 #zsh 上的 ft,添加

zstyle ':vcs_info:git:*:-all-' command =git

~/.zshrc获取框架后,已解决此问题。

相关内容