在bash中,我正试图同时启动几个xeyes。
如果我这样做:
for a in `seq 1 3`; do "xeyes"; done
我得到1个Xeye,而且只有当我closures了前一个Xeye时,这个Xeyes才会出现。
所以我试了一下:
for a in `seq 1 3`; do "xeyes &"; done
但是在运行这个命令时,没有任何反应。
我可能做错了什么?
通常启动支持X的应用程序意味着它们不会将控制权返回给bash,直到完成为止,正如您在第一个示例中看到的那样。 在第二个例子中,引号是(我认为)启动一个不知道显示器运行的subprocess。
简单地把它分成三行(以避免引号的必要)为我做了诡计。 换一种说法:
for i in `seq 1 3`; do xeyes & done
请享用! 这不是bash最有用的演示,但我想这可能是有趣的。
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
尝试
for a in `seq 1 3`; do xeyes & ; done
你的错误是把"xeyes &"放在双引号中。 这使得bash把它当作一个包含空格和&符号的单字命令。