【问题标题】:Git branch picker with dialog: escaping quotes带对话框的 Git 分支选择器:转义引号
【发布时间】:2017-02-15 14:42:53
【问题描述】:

我想要一个用于 shell 脚本的 git 分支选择器,但在将列表传递给带有 xargs 的对话框时遇到了转义引号的问题。 也许有人可以帮我找到并解决问题? 我正在使用以下命令来创建一个对话框:

git for-each-ref --sort=-committerdate refs/heads/ --format='"%(refname:short)" "%(authorname): %(contents:subject) (%(committerdate:relative))"'|xargs -p -d'\n' dialog --menu \"Select a branch\" 0 0 0

我得到Error: Expected 2 arguments, found only 1. 而不是对话框。

【问题讨论】:

  • 这里缺少空格? -d'\n'
  • 我认为没有必要。
  • 哪个部分会引发该错误?
  • 我怀疑作为提交消息的 %(contents:subject) 有一些单引号或其他必须转义的字符。

标签: git bash dialog xargs


【解决方案1】:

您可能被xargss 引用所欺骗。 我可以让它与 GNU Parallel 一起工作:

git for-each-ref --sort=-committerdate refs --format='%(refname:short)
%(authorname): %(contents:subject) (%(committerdate:relative))' | parallel -r --tty -Xj1 dialog --menu \"Select a branch\" 0 0 0

是的,有 'short)' 之后有一个换行符。

【讨论】:

  • 我看到有些人使用并行而不是 xargs 但在我看来,它的目的与我想要达到的目的不同。就我而言,我只想将一堆字符串作为参数传递给对话框,这是 xargs 应该做的。
  • @ska-uk 正如您在评论中提到的那样,您的问题可能是由于需要为xargs 转义的字符做正确的事情。 GNU Parallel 默认引用所有内容,所以它应该更容易预测并给你更少的意外惊喜。无论如何,我尝试让它与xargs 一起工作但失败了。如果您有很多选项,两者都会失败,因为您可能会达到 shell 命令的最大行长。
猜你喜欢
  • 2016-08-09
  • 2011-11-29
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
相关资源
最近更新 更多