Как я могу искать и выполнять два сценария одновременно в Unix? - PullRequest
0 голосов
/ 19 сентября 2018

Предположим, у вас есть папка, содержащая два файла.

Пример: stop_tomcat_center.sh и start_tomcat_center.sh.

В моем примере возврат ls *tomcat* возвращает эти два сценария.Как я могу искать и выполнять эти два сценария одновременно?

Я пытался

ls *tomcat* | xargs sh

, но выполняется только первый сценарий (не второй).

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете выполнить следующее для поиска и выполнения

find . -name "*.sh" -exec sh x {} \;

find найдет файл, а exec найдет совпадение и выполнит

0 голосов
/ 19 сентября 2018

xargs отсутствует опция -n 1.

С man xargs:

-n max-args, --max-args = max-args

Использовать не более max-args аргументов в командной строке.Если будет превышен размер (см. Параметр -s), будет использовано меньше аргументов, чем max-args, если не задана опция -x, в этом случае xargs завершит работу.

xargs в противном случае попытаетсявыполните команду с максимально возможным количеством параметров, что имеет смысл для большинства команд.

В вашем случае ls *tomcat* | xargs sh работает sh stop_tomcat_center.sh start_tomcat_center.sh, а stop_tomcat_center.sh, вероятно, просто игнорирует параметр $1.


Также не рекомендуется использовать вывод ls.Лучше было бы использовать find -maxdepth 1 -name '*tomcat*' -print0 | xargs -0 -n 1 sh или for command in *tomcat*; do sh "$command"; done


Этот ответ основан на предположении, что ОП означало «оба с одной командной строкой», когда он писал «одновременно».

Для решений по параллельному выполнению взгляните на другие ответы.

0 голосов
/ 19 сентября 2018

Простой способ сделать несколько вещей параллельно - это GNU Parallel :

parallel ::: ./*tomcat*

Или, если в ваших скриптах нет шебанга в первой строке:

parallel bash ::: ./*tomcat*

Или, если хотите, xargs:

ls *tomcat* | xargs -P 2
...