Как читать команды из файла?

У меня есть некоторые скрипты php которые я запускаю в следующем порядке:

 php index.php import file1 --offline && php index.php import file2 --deleteUnused && php index.php import file3 

Теперь я недавно открыл parallel команду, и я попробовал что-то вроде этого:

 parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3" 

И он отлично работает.

Возможно ли, что у меня может быть файл, в который включены все вышеприведенные команды, и начать parallel с возможностью читать команды из файла?

Что-то вроде этого:

 parallel -XX myFileWithCommands.txt 

Создайте myFileWithCommands.txt :

 php index.php import file1 --offline php index.php import file2 --deleteUnused php index.php import file3 

Затем выполните параллель следующим образом:

 parallel -j 3 -- < myFileWithCommands.txt 

Ну, есть два простых способа сделать это, что я могу себе представить. Вы можете либо передать содержимое файла в parallel , либо написать сценарий оболочки. Если все, что вы хотите выполнить, это конкретный набор задач, тогда сценарий оболочки может иметь больше смысла. Он был бы очень коротким, сладким и точным, а также:

 #!/bin/sh parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3" 

Теперь, если вам нужно что-то более обобщаемое (т. Е. Что-то, что вы можете сделать несколько наборов команд для загрузки в виде группы), тогда может быть проще придумать простой формат файла, а затем передать содержимое файла в parallel .

Самый простой способ сделать это – если у вас есть текст, включайте команды verbatim, которые вы хотите запустить.

Например, если это был ваш текстовый файл ( test.txt ):

 "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3" 

Затем вы можете запустить следующее, и это может сработать нормально:

 $ cat test.txt | parallel -j 3 -- 

Вы также можете поэкспериментировать с немного более сложным форматом файла (например, каждая команда на новой строке и не окружена кавычками). Если вам нужно спуститься по этой дороге, вам нужно будет выполнить небольшой маразм в файле, прежде чем прокладывать его parallel что может быть выполнено довольно легко, скажем, например, awk .

Однако, если вы решите создать более гибкий формат файла, возможно, было бы полезно создать сценарий (или функцию) вспомогательной оболочки, который избавит вас от необходимости вводить awk '<whatever patterns you match> { do something }' | parallel -j3 -- awk '<whatever patterns you match> { do something }' | parallel -j3 -- каждый раз.