Предполагая, что вы хотите выполнить десять раз, этот синтаксис будет работать:
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 -n0 echo -n 'x' ::: {1..5}
Как это устроено:
- Входная последовательность встроена.
{1..5} производит разделенную пробелами последовательность цифр от одной до пяти.
-n0игнорирует значения последовательности (и 'x'вместо этого мы выводим строку каждый раз)
- Вывод:
xxxxx
По сравнению с:
parallel echo -n ::: {1..5}
Как это устроено:
- Входная последовательность встроена.
{1..5} производит разделенную пробелами последовательность цифр от одной до пяти.
- Каждое значение из входной последовательности используется в качестве аргумента для
echo. Заказ не гарантирован.
- Выход:
43215. Может быть любой заказ.