如何将参数从git别名传递到外部脚本

特里

我在将参数从git别名传递到外部bash脚本文件时遇到问题。目前,我的bash脚本文件与.gitconfig位于同一目录中。我计划将所有复杂的 !f() { }别名移到那里,以避免与所有逃避和争端作斗争。

所以我的脚本文件名为.gitconfig.kat.aliases.script,它看起来像这样:

#!/bin/bash

openInBrowser() {
    REPO_URL=$(git config remote.origin.url)

    find="[email protected]:"
    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'  

我遵循此问题的语法来表示外部脚本/函数的别名。然后,我按照该问题的语法将参数传递给函数(别名上面没有像建议的问题那样传递虚拟参数,更多信息请参见下文)。

问题是,没有伪参数,当我执行时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'?

博士
$ 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名称或脚本名称,不需要$@

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章