在Mac OS X中运行多个没有参数的shell脚本

时间:2011-04-18 16:12:53

标签: macos bash command-line

我在目录中有许多脚本都以deploy_开头(例如,deploy_example.com)。
我通常通过拨打./deploy_example.com一次运行一个。

如何一个接一个地运行它们(或者如果可能的话,一次全部运行......)?

我试过了:

find deploy_* | xargs | bash

但是失败了,因为它需要绝对路径,如果这样调用。

4 个答案:

答案 0 :(得分:3)

您可以通过多种方式完成此操作。例如,你可以这样做:

for i in deploy_* ; do bash $i ; done

答案 1 :(得分:3)

您可以这样做:

for x in deploy*; do bash ./$x; done

答案 2 :(得分:1)

find deploy_* | xargs -n 1 bash -c

将一个接一个地运行它们。查看xargs的手册页和--max-procs设置以获得某种程度的并行性。

答案 3 :(得分:1)

在子shell中执行以防止您当前的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
)