用于更改 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
}
我经常需要使用命令行替换默认的 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
}