Я пытаюсь запустить несколько экземпляров сценария с параллельным GNU, но сценарий не принимает аргументов.
Если я просто выполню 'parallel foo.sh', я получу следующее:
parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
Предполагая, что вы хотите запустить десять раз, этот синтаксис будет работать:
parallel -n0 foo.sh ::: {1..10}
parallel
требуется входная последовательность некоторой длины (::: {1..10}
) И вам нужно игнорировать содержимое входной последовательности (-n0
), вас волнует только его длина.
Ваша исходная команда: parallel foo.sh
, не содержит входной последовательности, указывающей, какой параллелизм вы хотите. Загадочное предупреждение говорит вам, что parallel
собирается начать прослушивание терминала в поисках входной последовательности, и это, вероятно, не то, что вам нужно.
Вот пример учебника:
seq 10 | parallel -n0 my_command my_args
Как это устроено:
parallel
всегда откуда-то берет входную последовательность. Это может быть встроенная последовательность, разделенная пробелами, которой предшествует :::
ИЛИ последовательность с разделителями новой строки из файла или файлового источника, такого как конвейер. В этом примере входная последовательность - из трубы.seq 10
создает последовательность цифр от одного до десяти, разделенных новой строкой.-n0
опция указывает parallel игнорировать значения во входной последовательности. Все, что нас волнует, - это длина последовательности, а не ее содержимое. Даже если цифры не используются, команда все равно будет выполнена десять раз.Другой пример:
parallel -n0 echo -n 'x' ::: {1..5}
Как это устроено:
{1..5}
выдает последовательность цифр от одной до пяти, разделенных пробелами.-n0
игнорирует значения последовательности (и мы повторяем строку 'x'
каждый раз вместо этого.)xxxxx
Сравнить с:
parallel echo -n ::: {1..5}
Как это устроено:
{1..5}
выдает последовательность цифр от одной до пяти, разделенных пробелами.echo
. Заказ не гарантирован.43215
. Может быть любой порядок.Вы читали примеры в руководстве? В частности https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Run-the-same-command-10-times