将字符串作为参数发送到bash脚本,以使用Git别名自动执行Git命令

将字符串作为参数发送到bash脚本,以使用Git别名自动执行Git命令,bash,git,shell,Bash,Git,Shell,我有一个bash脚本,我已经使用了一段时间,可以将以下Git命令自动化为一个命令,以便于使用: git add. git commit -m git push 脚本在.gitconfig文件中定义为别名。到目前为止,它工作得非常好,但我希望能够为它添加一些额外的功能,以便我可以传入两个字符串,而不是一个字符串。第一个字符串是JIRA票证号,第二个是提交消息。在将提交推送到远程之前,将在提交消息前面加上股票代码 我尝试过修改脚本,但是现在当我输入三个参数时,我得到了一个过多的参数错误。但我不确定

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

git add.
git commit -m
git push
脚本在.gitconfig文件中定义为别名。到目前为止,它工作得非常好,但我希望能够为它添加一些额外的功能,以便我可以传入两个字符串,而不是一个字符串。第一个字符串是JIRA票证号,第二个是提交消息。在将提交推送到远程之前,将在提交消息前面加上股票代码

我尝试过修改脚本,但是现在当我输入三个参数时,我得到了一个过多的参数错误。但我不确定我做错了什么

!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 CommitPush这个JIRA-137测试提交消息1

我已经设法解决了这个问题。显然,正如另一位用户指出的那样,这是由不正确的'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
问题是$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"

这个想法有点清楚,但是你的帖子很混乱。在开始时,您声明要传入两个字符串,而不是一个字符串。您的示例未显示正在使用的变量或原始脚本。下一部分说,当您传递3个参数时,会出现一个错误。你不想只传递2个参数吗?你在哪里定义f?这个是无效的shell语法;它在定义Git别名时的用途是指示Git将下面的内容作为shell命令处理,而不是另一个Git子命令。2美元不是提交消息吗?你不想检查$3吗?git commit调用中的反斜杠也是可疑的,这取决于你实际定义f的位置。那么你应该把它放在问题中。还应该引用$3。仅仅因为您希望参数为1或至少一个单词,并不意味着在使用别名时参数将为1。如果您完全忽略第三个参数,假设一个空参数与不是1的参数相同,您也会得到一个错误。这也是我最后得到的代码,谢谢。我将把这个答案标为正确。