将字符串作为参数发送到bash脚本以使用Git Alias自动化Git命令

时间:2019-04-04 12:42:47

标签: bash git shell

我有一个bash脚本,已经使用了一段时间了,可以将以下Git命令自动转换为单个命令,以便于使用:

git add.
git commit -m
git push

该脚本在.gitconfig文件中定义为别名。到目前为止,它确实运行良好,但是我希望能够为其添加一些额外的功能,以便我可以传递两个字符串而不是一个字符串。第一个字符串是JIRA票证编号,第二个字符串是提交消息。在将提交推送到远程之前,代码编号将在提交消息之前。

我尝试更改脚本,但是现在当我输入三个参数时,出现too many arguments错误。我不确定自己在做什么错。

!f() 
{ 
    ticketNumber=$1 
    commitmessage=$2
    confirm=$3; 

    if [ $2 = 1 ]; 
    then 
    git add .; 
    git status; 
    git commit -m \"[${ticketNumber}] ${commitmessage}\"; 
    git push; fi 
    }; 
f

例如,以下函数调用会产生错误:

git commitpushthis "JIRA-137" "Test commit message" 1

2 个答案:

答案 0 :(得分:1)

问题在于$2没有被引用,这意味着您最终会得到类似

的命令
[ Test commit message = 1 ]

引用$2可以解决此问题,尽管足够长的时间让您意识到您仍然打算使用$3。正确的定义似乎是(为简洁起见,省略了变量名):

commitpushthis = "!f() { if [ \"$3\" = 1 ]; then git add .; git status; git commit -m \"[${ticketNumber}] ${commitmessage}\"; git push; fi; }; f"

答案 1 :(得分:0)

我设法解决了这个问题。显然,这是由于另一个用户指出的`if [$ 2 = 1]错误。

下面显示的新代码可以正常工作。

!f() 
{ 
    ticketNumber=$1 
    commitmessage=$2
    confirm=$3; 

    if [ $3 = 1 ]; 
    then 
    git add .; 
    git status; 
    git commit -m \"[${ticketNumber}] ${commitmessage}\"; 
    git push; fi 
    }; 
f