首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git分支命令作为cli命令运行良好,但在使用变量从循环或脚本运行时失败。

git分支命令作为cli命令运行良好,但在使用变量从循环或脚本运行时失败。
EN

Stack Overflow用户
提问于 2021-11-09 21:06:38
回答 1查看 80关注 0票数 0

在创建安装脚本时,我在本地克隆了几个git repos。这是通过一个临时可用的代理来完成的,该代理以后可能可用,也可能不可用,因此我需要将远程回购中的所有远程分支创建为可以切换到的本地分支。我有一种方法来提取我想要的远程回复的名称,当存储为

代码语言:javascript
复制
[user]$ nvVar=$(git branch -r | grep -v '\->' | grep -Ev 'master|spdk\-1\.6' | cut -d'/' -f2)

这给了我可以迭代的变量列表,其中包含了我需要删除的分支。

代码语言:javascript
复制
[user]$ echo "$nvVar"
lightnvm
nvme-cuse
spdk

如果我手动执行所有这些操作,我将使用以下命令:

代码语言:javascript
复制
[user]$ git branch --track lightnvm origin/lightnvm
Branch lightnvm set up to track remote branch lightnvm from origin.

效果很好..。但是,当我试图使用shell展开循环遍历变量时,我会失败。(FYI,如果我把引号放在$nvVar周围,它不会迭代,只会尝试运行整个字符串而失败。)我还尝试使用一个数组来完成这个任务,这个数组也不起作用,我还使用了一个with循环,使用git分支-r的过滤输出)

代码语言:javascript
复制
[user]$ for i in $nvVar; do git branch --track "${i}" "origin/${i}"; done

它应该生成以下git命令:

代码语言:javascript
复制
git branch --track lightnvm origin/lightnvm
git branch --track nvme-cuse origin/nvme-cuse
git branch --track spdk origin/spdk

似乎与手动输入的同一命令相同。但相反,我得到了这些错误:

代码语言:javascript
复制
fatal: 'lightnvm' is not a valid branch name.
fatal: 'nvme-cuse' is not a valid branch name.
fatal: 'spdk' is not a valid branch name.

这毫无意义..。

操作系统: RHEL 7.6

Git版本: 1.8.3.1

bash版本: GNU,版本4.2.46(2)-release (x86_64-redhat-linux-gnu)

(编辑)显然,我有一些特殊的字符被捕获,这些字符扰乱了命令。

有一个“^[m”被附加到捕获的变量.我真的不知道如何在不对命令进行硬编码的情况下处理这些命令,而这正是我所希望避免的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 00:10:08

想出了一个解决办法:

代码语言:javascript
复制
echo '#!/bin/bash' > gitShell
git branch -r | grep -v '\->' | grep -Ev 'master|spdk\-1\.6' | cut -d'/' -f2 | while read remote; do
  echo "git branch --track ${remote} origin/${remote}" >> gitShell
done
cat -v gitShell | sed 's/\^\[\[\m//g' > gitShell1
if /bin/bash -ex gitShell1; then
  echo 'Git repos branched'
  rm gitShell
  rm gitShell1
fi

我只需将输出推送到一个文件中,然后使用cat -v强制隐藏字符显示为普通字符,然后用sed过滤掉它们,然后运行新脚本。

这很麻烦,但很管用。显然,git返回“私有unicode字符”以响应远程查询。

感谢@Cyrus告诉我,我在原始变量中有隐藏的字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69905099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档