在终端中的 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)
所以重申一下,为什么不能用“&;”运行命令 在终端中,或者如果有可能如何实现?提前致谢。
问题在于与号 (&) 后面的分号:
&符号与分号或换行符的作用相同,它表示命令的结束,但它会导致 Bash 异步执行命令。 BashSheet
基本上,就好像您将双分号背靠背一样,这也会导致语法错误。
要解决此问题,您只需删除分号,我以这种方式对其进行了测试,它似乎可以正常工作:
while true; do curl -s https://some.site.com/someImage.jpg > /dev/null & echo blah ; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |