为什么不能在 bash 循环的后台运行命令?

Ube*_*mus 2 bash

在终端中的 bash 中,不可能运行以和 & 结尾的命令(被发送到后台)后跟另一个命令(显然它们之间有一个 ;)。这是为什么?为什么你不能用“&;”运行任何东西 或“$;” 在里面?

下面是这个问题的上下文。我正在尝试重新创建 502 错误并尝试对测试服务器中的特定页面进行 DoS。我试图运行这个:

while true; do curl -s https://some.site.com/someImage.jpg > /dev/null &; echo blah ; done
Run Code Online (Sandbox Code Playgroud)

作为终端中的“单线”。我收到此错误:

-bash: 意外标记附近的语法错误`;'

然而,这些命令是单独工作的,当我不在后台运行 curl 命令时,它也可以作为循环工作。当它编写一个单行脚本“/tmp/curlBack.sh”时它也可以工作,它只包含

curl -s https://some.site.com/someImage.jpg > /dev/null &
Run Code Online (Sandbox Code Playgroud)

然后运行

while true; do bash /tmp/curlBack.sh ; echo blah ; done
Run Code Online (Sandbox Code Playgroud)

所以重申一下,为什么不能用“&;”运行命令 在终端中,或者如果有可能如何实现?提前致谢。

WiG*_*eky 5

问题在于与号 (&) 后面的分号:

&符号与分号或换行符的作用相同,它表示命令的结束,但它会导致 Bash 异步执行命令。 BashSheet

基本上,就好像您将双分号背靠背一样,这也会导致语法错误。

要解决此问题,您只需删除分号,我以这种方式对其进行了测试,它似乎可以正常工作:

while true; do curl -s https://some.site.com/someImage.jpg > /dev/null & echo blah ; done
Run Code Online (Sandbox Code Playgroud)