【问题标题】:XARGS Long Arguments and Pause Between CommandsXARGS 长参数和命令之间的暂停
【发布时间】:2018-12-09 09:44:16
【问题描述】:

如果命令参数太长,Xargs 将自动执行多次命令。

我目前正在检索 git 中的修订差异,并通过 xargs 将这些参数传递给 git 存档。碰巧版本差异很长,因此 xargs 自动将命令拆分为两次。

因此,git archive 对同一个存档执行了两次,导致第一个命令存档的任何内容都被第二个命令清除。

有没有办法让 xargs 在命令之间暂停或者通知 xargs 归档到两个不同的 zip 文件中?

【问题讨论】:

  • Xargs will execute command more than once automatically if the command arguments are too long 你能举个例子吗? seq -s '' 9999 | xargs -t -- echo >/dev/null 工作正常并执行单个回显。我找不到为 xargs 复制“太长”参数的方法。
  • Xargs 有 -s 选项。如果它超过了它的值,它将被 xargs 通过在同一个命令上多次运行并分割参数来分割。
  • @KamilCuk 阅读man page for xargs,它准确地描述了这种行为。即使没有@Hatjhie 的评论中描述的-s 选项,它也会这样做。
  • @Hatjhie,...显示您正在尝试运行的实际命令会很有帮助,这样我们就可以具体而不是推测性地讨论如何修改它。
  • ...甚至可能是(确实,在我看来非常有可能)xargs 根本不是适合您工作的工具,但我们可以'如果我们看不到我们的代码,不建议使用什么。

标签: bash git xargs


【解决方案1】:

你可以让 xargs 运行你喜欢的任何命令;这当然可以是暂停或运行您在调用之间定义的另一个触发器的命令。

所以,如果您当前正在运行:

xargs -0 doSomethingWithFiles

...您可以将其替换为:

xargs -0 bash -c '"$@"; sleep 5' _ doSomethingWithFiles

【讨论】:

  • 谢谢先生!这就是我要找的!
猜你喜欢
  • 2019-01-18
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2017-05-20
  • 2011-07-07
  • 2016-03-15
相关资源
最近更新 更多