循环启动多个进程

循环启动多个进程

在 bash 中,我尝试同时启动多个 xeyes。

如果我这样做:

for a in `seq 1 3`; do  "xeyes"; done

我得到 1 个 xeye,并且仅当我关闭前一个 xeye 时才会出现后续 xeye。

因此,我尝试:

for a in `seq 1 3`; do  "xeyes &"; done

但是运行该命令时,什么也没有发生。

我可能做错了什么?

答案1

通常启动支持 X 的应用程序意味着它们在完成之前不会将控制权交还给 bash,正如您在第一个示例中看到的那样。在第二个示例中,引号(我认为)正在启动一个不知道在哪个显示器下运行的子进程。

只需将其拆分为三行(以避免使用引号)即可。换句话说:

for i in `seq 1 3`; do
 xeyes &
done 

尽情享受吧!这不是最有用的 bash 演示,但我想它可能很有趣。

答案2

Bash 有一个范围运算符和 C 风格for循环,因此seq通常不需要。在 Bourne shell 中或在某些特殊情况下,您可能需要它。以下是在纯 Bash 中执行示例而不调用任何外部程序(除了xeyes)的方法:

for a in {1..3}; do xeyes & done    # range of 1 to 3, no vars in this type of {}

或者

for ((a = 1; a <= 3; a++)); do xeyes & done    # C-style for loop, can have vars

答案3

尝试

for a in `seq 1 3`; do xeyes & ; done

你的错误在于使用了"xeyes &"双引号。这会导致 bash 将其视为包含空格和 & 符号的单词命令。

相关内容