如何将参数从 git 别名传递到外部脚本
How to pass parameters from a git alias to an external script
我在将参数从 git 别名传递到外部 bash 脚本文件时遇到问题。目前,我的 bash 脚本文件与 .gitconfig 位于同一目录中。我计划将我所有的 complex !f() { }
别名移到那里以避免与所有转义和不评论作斗争。
所以我的脚本文件被命名为 .gitconfig.kat.aliases.script 它看起来像这样:
#!/bin/bash
openInBrowser() {
REPO_URL=$(git config remote.origin.url)
find="git@bitbucket.org:"
replace="https://bitbucket.org/"
# Replace SSH with HTTPS prefix
REPO_URL=$(echo $REPO_URL | sed -e "s%${find}%${replace}%g")
explorer $REPO_URL
exit 0;
}
checkoutRemoteBranch() {
echo "$# Parameters"
echo [=11=]
echo
echo
if [ "$#" = 2 ]
then
echo -e "BINGO"
# git fetch
# git co -b /
else
echo -e "usage:\tgit co-rb <origin> <branch>"
fi
}
配置1
在我的 .gitconfig [别名] 部分中,我有这个:
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\"'
open = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && openInBrowser'
我按照 this question's syntax for aliases to an external script/function. Then, I followed this question's 语法将参数传递给函数(上面的别名没有像建议的问题那样传递虚拟参数,更多信息见下文)。
问题是,在没有虚拟参数的情况下,当我执行 git co-rb origin feature/test
时,我得到以下输出:
1 Parameters
origin
feature/test
配置2
如果我在 $@...后定义一个虚拟参数
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\" x'
输出为:
2 Parameters
origin
feature/test
x
配置 3
如果我将虚拟参数的位置更改为co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch x \"$@\"'
输出为:
2 Parameters
origin
x
feature/test
问题:
1、配置1——参数计数错误,位置参数偏移-1。
1.配置2 - 参数计数正确,但位置参数偏移-1。
1. Configuration 3 - 参数计数正确,但参数全乱了。 x
被注入中间,$1 的位置不正确。
我应该如何设置我的 git 别名,以便参数计数正确并且位置 1..N 是我所期望的?或者我应该更改我的 shell 脚本,以便每次检查参数计数时,我都会检查 'count-1'?
$ bash -c 'echo $@' 1 2 3
2 3
$ bash -c 'echo [=10=] $@' 1 2 3
1 2 3
也就是"$@"
传递参数是从1号开始的,但是在这
情况还有第 0 个参数。
所以通过 [=13=]
:
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch "[=11=]" "$@"'
[=13=]
未添加到 $@
,因为在 100 个用例中有 99 个用例不需要它。通常是 shell 名称或脚本名称,在 $@
.
中都不需要
我在将参数从 git 别名传递到外部 bash 脚本文件时遇到问题。目前,我的 bash 脚本文件与 .gitconfig 位于同一目录中。我计划将我所有的 complex !f() { }
别名移到那里以避免与所有转义和不评论作斗争。
所以我的脚本文件被命名为 .gitconfig.kat.aliases.script 它看起来像这样:
#!/bin/bash
openInBrowser() {
REPO_URL=$(git config remote.origin.url)
find="git@bitbucket.org:"
replace="https://bitbucket.org/"
# Replace SSH with HTTPS prefix
REPO_URL=$(echo $REPO_URL | sed -e "s%${find}%${replace}%g")
explorer $REPO_URL
exit 0;
}
checkoutRemoteBranch() {
echo "$# Parameters"
echo [=11=]
echo
echo
if [ "$#" = 2 ]
then
echo -e "BINGO"
# git fetch
# git co -b /
else
echo -e "usage:\tgit co-rb <origin> <branch>"
fi
}
配置1
在我的 .gitconfig [别名] 部分中,我有这个:
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\"'
open = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && openInBrowser'
我按照 this question's syntax for aliases to an external script/function. Then, I followed this question's 语法将参数传递给函数(上面的别名没有像建议的问题那样传递虚拟参数,更多信息见下文)。
问题是,在没有虚拟参数的情况下,当我执行 git co-rb origin feature/test
时,我得到以下输出:
1 Parameters
origin
feature/test
配置2
如果我在 $@...后定义一个虚拟参数
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\" x'
输出为:
2 Parameters
origin
feature/test
x
配置 3
如果我将虚拟参数的位置更改为co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch x \"$@\"'
输出为:
2 Parameters
origin
x
feature/test
问题:
1、配置1——参数计数错误,位置参数偏移-1。
1.配置2 - 参数计数正确,但位置参数偏移-1。
1. Configuration 3 - 参数计数正确,但参数全乱了。 x
被注入中间,$1 的位置不正确。
我应该如何设置我的 git 别名,以便参数计数正确并且位置 1..N 是我所期望的?或者我应该更改我的 shell 脚本,以便每次检查参数计数时,我都会检查 'count-1'?
$ bash -c 'echo $@' 1 2 3
2 3
$ bash -c 'echo [=10=] $@' 1 2 3
1 2 3
也就是"$@"
传递参数是从1号开始的,但是在这
情况还有第 0 个参数。
所以通过 [=13=]
:
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch "[=11=]" "$@"'
[=13=]
未添加到 $@
,因为在 100 个用例中有 99 个用例不需要它。通常是 shell 名称或脚本名称,在 $@
.