Как заставить GNU работать параллельно на git bash в Windows 7? - PullRequest
1 голос
/ 22 марта 2020

Я смог установить GNU Parallel глобально в git - bash, следуя этому ответу .

Однако при выполнении примера команды, как указано в параллельном учебнике ,

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
.
.
.

Что я тут не так делаю?

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Таким образом, причина root заключается в том, что CygWin (в отличие от GNU / Linux) не учитывает перенаправление STDERR, если командная строка слишком длинная.

GNU Parallel вычисляет, насколько длиннее возможный Командная строка выполняется путем двоичного поиска длины. Это очень медленно на CygWin, потому что разветвление командной строки размером 12 МБ ужасно медленно (и 12 МБ, похоже, является пределом в моей версии 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 голосов
/ 22 марта 2020

Вы не первый, кто столкнулся с этой проблемой, и в настоящее время мы не знаем, что ее вызывает. У меня есть доступ к машине 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

Это даст все версии, которые работают.

Отправьте вывод из parallel -Dall echo ::: foo для самой новой рабочей версии, следующей версии и самой новой версии (20200322).

...