在 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 将其视为包含空格和 & 符号的单词命令。