我在将参数从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 $0
echo $1
echo $2
if [ "$#" = 2 ]
then
echo -e "BINGO"
# git fetch
# git co -b $2 $1/$2
else
echo -e "usage:\tgit co-rb <origin> <branch>"
fi
}
配置1
在我的.gitconfig [alias]部分中,我有以下内容:
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\"'
open = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && openInBrowser'
我遵循this question's语法来获取外部脚本/函数的别名。然后,我遵循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.配置3-参数计数正确,但是参数都弄乱了。 x
被注入到中间,位置对于$ 1来说是不正确的。
我应该如何设置我的git别名,以便参数计数正确并且位置1..N是我期望的值?还是应该更改Shell脚本,以便每次检查参数计数时都检查'count-1'?
答案 0 :(得分:0)
$ bash -c 'echo $@' 1 2 3
2 3
$ bash -c 'echo $0 $@' 1 2 3
1 2 3
也就是说,"$@"
传递从1开始的参数,但是在此
情况中还有第0个参数。
因此,通过$0
:
co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch "$0" "$@"'
$0
不会添加到$@
中,因为在100个案例中有99个用例是不需要的。通常是shell名称或脚本名称,$@
中不需要。