【问题标题】:for loop in prompt with git command : -bash: syntax error near unexpected token `do'使用 git 命令提示 for 循环:-bash:意外标记“do”附近的语法错误
【发布时间】:2022-01-06 05:52:34
【问题描述】:

我退出了新的 bash 并尝试执行一个 for 循环以在我的 git 目录中查找所有未转换为 svn 的标签。

我已经运行了以下命令:

echo < for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags); do git tag ${t/tags\//} $t && git branch -D -r $t done

但是,我遇到了这个错误:

-bash: syntax error near unexpected token `&&'

我尝试了几种方法,例如移动分号,但它总是出现相同的错误,但使用不同的字符,如 &&,完成或我有以下错误:

-bash: for: No such file or directory

因为这些是 unix 命令,所以我在 windows 上使用 cygwin。

有什么想法

ps: 我正在关注这个教程:https://www.gitkraken.com/blog/migrating-git-svn! 谢谢你的帮助:)

【问题讨论】:

  • 循环和这里的语法都是纯 bash 项目。 Git 进入画面的唯一方法是通过 git for-each-ref 的输出,并且您正在循环中运行 Git 命令。

标签: bash for-loop syntax-error unexpected-token


【解决方案1】:

&lt; 是输入重定向。正确的是,需要一个文件名(或一个流程规范,然后必须将其括在括号中)。在您的情况下,您将单词 for 写在 &lt; 的右侧,并要求 bash 使用名为 for 的文件来替换标准输入。

此外,输入重​​定向对echo 没有意义,因为echo 不处理标准输入。你可以写一个

echo <abc

如果你愿意,但是 bash 只会检查文件 abc 的存在并设置重定向,而 echo 会默默地忽略它,所以这样做没有任何目的。

【讨论】:

  • 感谢您的回答 :) 这是否意味着如果我在没有 echo 的情况下运行我的命令,它将运行?因为我没有任何回报编辑:我运行它并且它没有返回任何错误但我认为这是因为我在 refs/remotes/tags 中没有任何内容
  • 我不知道你想达到什么目标,所以我可以回答这个问题。您刚刚发布了一些代码并想知道它为什么不起作用。如果您现在尝试不同的方法,请提出一个问题。发布您的代码、您想要的结果以及您实际得到的结果。并且,请接受您对this问题的答案之一,除非您认为他们没有回答您的问题。
【解决方案2】:

首先,您在done 之前缺少;

其次,你不能做echo &lt; for t in...,如果你想让它运行,删除echo &lt;

如果你不这样做,你会得到模棱两可的重定向。

【讨论】:

  • 感谢您的回答 :) 如果我删除 echo,我还会收到错误吗?
  • @ErwanLeflot :你为什么要问神谕,如果你可以简单地尝试一下?
  • 是的,面对这样的问题,我倾向于放弃。为什么echo &lt; 一开始就在那里?
猜你喜欢
  • 2018-02-16
  • 1970-01-01
  • 2014-09-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
相关资源
最近更新 更多