Предотвращение параллельной GNU от разделения аргументов

Я пытаюсь использовать GNU Parallel для запуска умножения числа за раз с комбинацией постоянных и разных аргументов. Но по какой-то причине постоянные аргументы разбиваются на пустое пространство, хотя я процитировал их при передаче их в parallel .

В этом примере константный аргумент 'a b' должен быть передан в debug-call как один аргумент вместо двух:

 $ parallel debug-call 'ab' {} ::: {1..2} [0] = '[...]/debug-call' [1] = 'a' [2] = 'b' [3] = '1' [0] = '[...]/debug-call' [1] = 'a' [2] = 'b' [3] = '2' 

debug-call – простой скрипт, который печатает каждый аргумент, который он передал в argv . Вместо этого я ожидаю увидеть этот результат:

 [0] = '[...]/debug-call' [1] = 'ab' [2] = '1' [0] = '[...]/debug-call' [1] = 'ab' [2] = '2' 

Является ли это ошибкой или существует опция предотвращения GNU Parallel от разделения аргументов командной строки перед передачей их команде?

One Solution collect form web for “Предотвращение параллельной GNU от разделения аргументов”

parallel запускает оболочку (которая точна в зависимости от контекста, в котором она вызывается, как правило, при вызове из оболочки, это та же оболочка) для синтаксического анализа конкатенации аргументов.

Так:

 parallel debug-call 'ab' {} ::: 'ab' c 

такой же как

 parallel 'debug-call ab {}' ::: 'ab' c 

parallel вызовет:

 your-shell -c 'debug-call ab <something>' 

Где <something> – аргументы (надеюсь) правильно процитированные для этой оболочки. Например, если эта оболочка bash , она будет запущена

 bash -c 'debug-call aba\ b' 

Здесь вы хотите:

 parallel 'debug-call "ab" {}' ::: 'ab' c 

Или

 parallel -q debug-call 'ab' {} ::: 'ab' c 

Там, где parallel будет приводить аргументы (в правильном (надеюсь) синтаксисе для оболочки) перед конкатенацией.

Чтобы избежать вызова оболочки в первую очередь, вместо этого вы можете использовать GNU xargs :

 xargs -n1 -r0 -P4 -a <(printf '%s\0' 'ab' c) debug-call 'ab' 

Это не будет вызывать оболочку (или любую из многих команд, запускаемых parallel при инициализации), но вы не сможете использовать какие-либо дополнительные функции parallel , такие как переупорядочение вывода с -k .

Вы можете найти другие подходы при параллельном выполнении фона

  • Безопасно ли параллельно проецировать параллельное выступление A в B
  • Gnu Parallel: более одного процессора?
  • Использование памяти параллельного ограничения GNU
  • scp не отображает вывод при использовании с gnu parallel
  • Как передать содержимое файла параметру / параметру функции
  • GNU parallel vs & (я имею в виду фон) vs xargs -P
  • Многокомпонентный инструмент в духе более «параллельной» модели?
  • Почему я не могу подключиться к параллели?
  • Когда параллельный выход GNU, моя программа также терпит неудачу
  • Могу ли я ожидать линейного масштабирования с помощью GNU Parallel
  • Стоит ли использовать параллельные процессы вместо forking в цикле for?
  • BASH: параллельный запуск
  • Linux и Unix - лучшая ОС в мире.