Запуск нескольких сценариев оболочки без аргументов в Mac OS X - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть много скриптов в каталоге, которые начинаются с deploy_ (например, deploy_example.com).
Я обычно запускаю их по одному, звоня ./deploy_example.com.

Как мне запустить их все, одно за другим (или все сразу, если это возможно ...)?

Я пробовал:

find deploy_* | xargs | bash

Но это терпит неудачу, так как ему нужен абсолютный путь, если так его назвать.

Ответы [ 4 ]

3 голосов
/ 18 апреля 2011

Вы можете просто сделать:

for x in deploy*; do bash ./$x; done
3 голосов
/ 18 апреля 2011

Вы можете сделать это несколькими способами. Например, вы можете сделать:

for i in deploy_* ; do bash $i ; done
1 голос
/ 18 апреля 2011

Выполняется в скорлупе, чтобы предотвратить потерю ваших текущих IFS и позиционных параметров.

( set -- ./deploy_*; IFS=';'; eval "$*" )

РЕДАКТИРОВАТЬ: Эта последовательность разбита

(                     # start a subshell, a child process of your current shell

  set -- ./deploy_*   # set the positional parameters ($1,$2,...)
                      #   to hold your filenames

  IFS=';'             # set the Internal Field Separator

  echo "$*"           # "$*" (with the double quotes) forms a new string:
                      #   "$1c$2c$3c$4c..." 
                      #   joining the positional parameters with 'c',
                      #   the first character of $IFS

  eval "$*"           # this evaluates that string as a command, for example:
                      #    ./deploy_this;./deploy_that;./deploy_example.com
)
1 голос
/ 18 апреля 2011
find deploy_* | xargs -n 1 bash -c

Запустит их всех один за другим. Посмотрите на страницу руководства для xargs и настройки --max-procs, чтобы получить некоторую степень параллелизма.

...