用于更改 git credential-osxkeychain 的 Zsh 别名

Zsh alias for changing git credential-osxkeychain

我经常需要使用命令行替换默认的 git osxkeychain 凭据。我手动的方法如下:

git credential-osxkeychain erase <Enter>
host=github.com <Enter>
protocol=https <Enter>

password=foo <Enter>
username=bar <Enter>
<Enter><Enter>

然后再次执行该过程,但 git credential-osxkeychain store 和新凭据除外。我想让它自动化,比如

alias git_newcred='git credential-osxkeychain erase; host=github.com; protocol=https;git credential-osxkeychain erase; host=github.com; protocol=https;'

其中 ; 换行符代替回车键。然而,因为它是无声的失败。

源码中read_credential方法的开头looks like this:

while (fgets(buf, sizeof(buf), stdin)) {
    char *v;

    if (!strcmp(buf, "\n"))
        break;
    buf[strlen(buf)-1] = '[=12=]';

如何为作为单个命令一部分的多行条目添加别名?或者有更好的方法吗?

(使用 zsh,但我不认为有任何特定于 zsh 的事情发生。)

您应该使用函数,而不是别名。在你 运行 git 之后,其余的数据被输入到那个命令,而不是 运行 由 shell 附加的命令。您可以使用此处的文档

git_newcred () {
    git credential-osxkeychain erase <<EOF
host=github.com
protocol=https
password=foo
username=bar
EOF
}

或用管道。

git_newcred () {
    # POSIX-compatible version
    # printf '%s\n' ... | git credential-osxkeychain
    print -l "host=github.com" "protocol=https" "password=foo" "username=bar" | git credential-osxkeychain
}