Таким образом, причина 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