使用Bash或ZSH有一种方法可以使用通配符为每个脚本执行相同的命令吗?

时间:2016-11-29 21:36:47

标签: bash shell zsh

我有一个包含脚本文件的目录,比如说:

scripts/
       foo.sh
       script1.sh
       test.sh
       ... etc

并希望执行每个脚本,如:

$ ./scripts/foo.sh start
$ ./scripts/script1.sh start
etc

无需知道所有脚本文件名。

有没有办法将start附加到它们并执行?我已经尝试过Tab-completion,因为它在ZSH中非常好,使用./scripts/*[TAB] start没有运气,但我想有另一种方法可以这样做,所以输出:

$ ./scripts/foo.sh start ./scripts/script1.sh start

或许还有其他一些方法可以让它变得更容易?我想在终端中这样做,如果可能的话没有别名或功能,因为这些脚本在我通过SSH连接的盒子上,不应该修改*._profile.*rc文件。

2 个答案:

答案 0 :(得分:3)

使用简单的循环:

for script in scripts/*.sh; do
    "$script" start
done

只有一点需要注意:如果没有此类*.sh文件,您将收到错误消息。一个简单的解决方法是检查$script实际上是否是文件(和可执行文件):

for script in scripts/*.sh; do
    [ -x "$script" ] && "$script" start
done

请注意,这可以写在一行,如果这是你想要的:

for script in scripts/*.sh; do [ -x "$script" ] && "$script" start; done

答案 1 :(得分:2)

Zsh有一些速记循环,bash没有:

for f (scripts/*.sh) "$f" start