Как передать переменную в параллельный скрипт из текстового файла по строкам

Мне нужно прочитать файл строки за строкой и передать строку как переменную для параллельного запуска скрипта.

например:

14 43 57 

находится в файле foo.txt

если я var = $ (cat foo.txt), то я могу использовать этот переменный $ var внутри скрипта, но как вызвать параллель, чтобы изменить эту переменную для каждого экземпляра, запускающего скрипт?

  • Как использовать переменную плюс glob ($ var *) в bash
  • Значение дефиса как специального параметра?
  • Ничего не делать в сценарии bash
  • Выполнить строку с переменными как команду
  • Может ли bash распознавать объявление переменной как строку, если вы не ставите кавычки?
  • Bash выполняет переменное расширение строки
  • использование строк вывода в виде массива в bash
  • Stat работает в Bash 4.3, но не в Bash 3.2?
  • 2 Solutions collect form web for “Как передать переменную в параллельный скрипт из текстового файла по строкам”

    вы можете использовать xargs .

    например: input – input.txt

     1 2 3 4 

    Команда запуска команды command.sh

     #/bin/bash echo $1: start date sleep 2s echo $1 : stop date 

    Совместная работа параллельно:

     ➜ /tmp cat input.txt| xargs -n 1 -P 4 ./command.sh 1: start 3: start 2: start 4: start Tue May 19 19:03:30 IDT 2015 Tue May 19 19:03:30 IDT 2015 Tue May 19 19:03:30 IDT 2015 Tue May 19 19:03:30 IDT 2015 1 : stop 4 : stop 3 : stop 2 : stop Tue May 19 19:03:32 IDT 2015 Tue May 19 19:03:32 IDT 2015 Tue May 19 19:03:32 IDT 2015 Tue May 19 19:03:32 IDT 2015 

    Вы также можете использовать GNU Parallel с флагом -a, который читается из файла.

     parallel -a foo.txt echo 14 43 57 

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

    Linux и Unix - лучшая ОС в мире.