【问题标题】:Getting SVN url of all branches using single line command使用单行命令获取所有分支的 SVN url
【发布时间】:2017-03-10 15:26:51
【问题描述】:

我正在尝试检索所有分支 os a repository 的 svn url。我使用一个简单的 bash 脚本得到了结果。 我可以使用 "xargs" 做同样的事情吗?我无法控制 xargs 命令。

我试过这样的

svn ls https://my.svn.net/svn/projectA/branches | xargs -0 -I {} svn info {}\ ; 

这仅打印 svn ls 的结果。

有什么想法吗?

编辑

svn ls 输出

svn ls https://my.svn.net/svn/projectA/branches

branch1
branch2
branch3
branch4

使用 xargs 时的预期输出

https://my.svn.net/svn/projectA/branches/branch1
https://my.svn.net/svn/projectA/branches/branch2
...
...

【问题讨论】:

  • @Inian 编辑了原始帖子。

标签: bash svn xargs


【解决方案1】:

您只需从xargs 中删除-0 标志,该标志用于读取NULL de-limited 输出,只需这样做

svn ls https://my.svn.net/svn/projectA/branches | xargs -I {} svn info "{}" 

在这里,svn ls .. 的输出通过管道传输到xargs,并存储在{} 中,它充当接收值的占位符,然后在每个分支上调用svn info 以提供你想要的信息。注意 {} 周围的双引号,添加以防止您从 svn ls 的输出经历由 shell 完成的 Word-Splitting

引自xargsman页面,

-0, --null

输入项以空字符而不是空格 结尾,并且引号和反斜杠不是特殊的(每个字符都按字面意思表示)。禁用文件字符串的结尾, 这被视为任何其他论点。当输入项可能包含空格、引号或反斜杠时很有用。 GNU find -print0 选项产生适合这种模式的输入。

从 cmets 看来,您似乎想要在每个分支名称后附加 URL,您可以这样做

svn ls https://my.svn.net/svn/projectA/branches | \
    xargs -I {} svn info "https://my.svn.net/svn/projectA/{}" 

与当前答案无关。此外,如果您使用的是GNU xargs,则可以使用其-r 标志来确保命令不会在管道的空输入上运行。

xargs -r -I {} svn info "https://my.svn.net/svn/projectA/{}" 

man 页面参考,

-r, --no-run-if-empty

如果标准输入不包含任何非空格,请不要运行该命令。通常,即使没有输入,该命令也会运行一次。这个选项是一个GNU 扩展

【讨论】:

猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2010-09-14
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多