如何在Windows 7中让GNU并行处理git bash?

问题描述 投票:1回答:2

通过遵循此answer,我能够在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-7 git-bash gnu-parallel
2个回答
1
投票

因此,根本原因是,如果命令行太长,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


0
投票

您不是第一个遇到此问题的人,目前我们不知道是什么原因引起的。我可以使用Windows-10机器,但看不到该行为。解决方法似乎是使用旧版本的GNU Parallel。您可以通过确定哪些版本可以提供帮助。如果只有一个版本(请看此处:https://ftpmirror.gnu.org/parallel),则可以运行以下命令:

testone() {
  v="$1"
  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

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

将最新版本,以下版本和最新版本(20200322)的parallel -Dall echo ::: foo输出发布。

© www.soinside.com 2019 - 2024. All rights reserved.