【问题标题】:bash add git command result to local variablebash 将 git 命令结果添加到局部变量
【发布时间】:2018-01-03 16:42:48
【问题描述】:

我正在尝试更改我的文件的名称,在我的文件中添加提交次数和当前分支名称,然后再将其发送到存储库。

但我收到以下错误:

./publish_to_artifactory.sh:第 4 行:本地:`rev-parse': not a valid identifier'`

upload() {
  local currentBranch=git rev-parse --abbrev-ref HEAD;
  local gitNumberOfCommits=git rev-list --count HEAD;

  for file in ./../*.ipa; do
    mv $file mobile-${currentBranch}-${gitNumberOfCommits};
    echo "uploading zeos-mobile-$currentBranch-$gitNumberOfCommits";
    curl -X PUT -u $PUBLISH_USER:$PUBLISH_PASS -T mobile-$currentBranch-$gitNumberOfCommits; http://example.com/artifactory/ios-dev-local/ --fail
  done
}

upload;

我做错了什么?

【问题讨论】:

  • 顺便说一句,您根本不应该将命令替换与local 放在同一行——这样做会用local 命令的退出状态隐藏这些替换的退出状态。
  • 改为将local currentBranch gitNumberOfCommits 作为一行运行,然后将currentBranch=$(...)gitNumberOfCommits=$(...) 分别放在单独的一行。见Why does local sweep the return code of a command?
  • 考虑通过shellcheck.net 运行您的代码,并修复它识别的各种引用错误。
  • 非常有趣。谢谢!

标签: git bash


【解决方案1】:

要将命令的输出分配给变量,您需要使用bash 中的命令替换语法。

local currentBranch="$(git rev-parse --abbrev-ref HEAD)"
local gitNumberOfCommits="$(git rev-list --count HEAD)"

您所做的是将文字字符串存储在定义的那些局部变量中。当 shell 对它们进行标记以进行评估时,它已经将其理解为变量赋值出现了可怕的错误!它所理解的是一个名为currentBranchlocal 变量设置为一个值git 并尝试将rev-list 作为它在其标准路径列表中明显找不到的命令运行(在$PATH 下)

【讨论】:

  • 另外,local a=b c 实际上意味着local a=b; local c。请注意,扩展结果 ($(git rev-parse ...)) 不会在此处重新扩展,因此即使 git rev-parse 可能产生多个单词,您也可以编写 local currentBranch=$(git rev-parse --abbrev-rev HEAD);但是双引号对我们自己的理智很有用。 :-) 最后,正如 Charles Duffy 所说,如果您想检查替换的 退出状态,您必须将其与 local 声明分开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2020-06-01
  • 2015-06-22
  • 2022-10-19
  • 2014-02-04
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多