我如何让 GNU parallel 在 Windows 7 中的 git bash 上工作?

How do I get GNU parallel to work on git bash in Windows 7?

我能够按照此 在 git-bash 中全局安装 GNU Parallel。

但是,在 运行 上 parallel-tutorial

中提到的示例命令
parallel -k echo ::: A B C > abc-file

我一直收到这个错误

sh: -c: option requires an argument
sh: -c: option requires an argument
sh: -c: option requires an argument
.
.
.

我做错了什么?

您不是第一个遇到此问题的人,目前我们不知道是什么原因造成的。我可以访问 Windows-10 机器,但我没有看到这种行为。解决方法似乎是使用旧版本的 GNU Parallel。您可以通过找出哪些版本有效来提供帮助。当你有一个单一的版本时(看这里:https://ftpmirror.gnu.org/parallel),那是有效的,运行 这个:

testone() {
  v=""
  wget -c https://ftpmirror.gnu.org/parallel/parallel-$v.tar.bz2
  tar xvf parallel-$v.tar.bz2
  cd parallel-$v
  src/parallel true ::: 1
}
export -f testone
parallel -k --joblog my.log testone {1}{2}22 ::: {2012..2020} ::: {01..12}
grep -E '\s0\s0\stest' my.log

这将提供所有可用的版本。

Post parallel -Dall echo ::: foo 的最新工作版本、后续版本和最新版本 (20200322) 的输出。

所以根本原因是 CygWin(与 GNU/Linux 相反)如果命令行太长则不遵守 STDERR 的重定向。

GNU Parallel 通过对长度进行二进制搜索来计算最长可能的命令行的长度。这在 CygWin 上非常慢,因为分叉 12 MB 命令行非常慢(12 MB 似乎是我的 CygWin 版本的限制)。

幸运的是它只做了一次。在 GNU Parallel 将行长度缓存在 ~/.parallel/tmp/HOSTNAME/linelen 之后,这就是您在删除 ~/.parallel/tmp 时遇到问题的原因。

这也是使用不同版本似乎有效的原因:您只需完成一个 运行,从而缓存长度。这不是版本的变化。

直到我设法让 CygWin 忽略 sh: -c: option requires an argument 您需要做的就是忽略它并耐心等待。我可能还应该发出一个小警告,让 CygWin 用户知道他们必须在第一时间耐心等待。

运行:

parallel echo ::: 1

它会吐出 sh: -c: option requires an argument 大约 25 次,但没关系。大约需要 30 秒才能完成。

在此之后一切都应该很快(嗯),你应该看不到错误。

它应该在 GIT 的最新版本中修复:https://savannah.gnu.org/git/?group=parallel