我如何让 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
我能够按照此
但是,在 运行 上 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