【问题标题】:Sending strings as parameter to bash script to automate Git commands using Git Alias将字符串作为参数发送到 bash 脚本以使用 Git Alias 自动执行 Git 命令
【发布时间】:2019-08-26 05:31:42
【问题描述】:

我有一个 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 个字符串而不是一个。您的示例显示没有使用任何变量,也没有显示原始脚本。下一部分说当您传递 3 个参数时会出现错误。您不想只传递 2 个参数吗?
  • 你在哪里定义f! 是无效的 shell 语法;它在定义 Git 别名时的用途是指示 Git 将后面的内容视为 shell 命令,而不是另一个 Git 子命令。
  • 您还有一个错误[$2 = 1]$2 不是提交信息吗?你不想检查$3吗?
  • git commit 的调用中的反斜杠也是可疑的,具体取决于您实际定义f 的位置。
  • 那么你应该把它放在问题中。

标签: bash git shell


【解决方案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"

【讨论】:

  • 这也是我最终得到的代码,谢谢。我会将此答案标记为正确。
【解决方案2】:

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

【讨论】:

  • $3 也应该被引用。仅仅因为您期望参数为 1(或至少一个单词)并不意味着它在使用别名时出现。如果你完全省略第三个参数,你也会得到一个错误,假设一个空参数与“不是 1 的参数”相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2016-09-18
  • 2011-10-16
  • 2011-01-22
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多