我有一个包含脚本文件的目录,比如说:
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
文件。
答案 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