我尝试了这个简单的测试
ping [SOME IP] &;ls
期望 ping 的输出与列表重叠。
相反,我收到一个错误:
bash:意外标记“;”附近有语法错误
添加空格没有帮助。如果分号被转义,则第一个命令开始,然后出现错误
;:未找到命令
将 ping 括在括号中几乎有效
(ping [SOME IP] &);ls
运行ls
至完成,然后ping
开始。我可以通过键入以下内容更轻松地实现此目的:
ls;ping ...
当第一个(或两个)进程在后台时,是否可以同时启动两个进程?
它们不能一起运行,因为它们在此上下文中执行相同的操作:两者都充当
&
列表终止符,表示命令的结束。您可以在其中任何一个之后开始一个新命令,因此无需同时使用两者。;
因此,要将一个命令发送到后台并立即启动另一个命令,只需执行以下操作:
就是这样。
&;
不是有效的 bash 语法。&
用于在后台运行命令,;
用于分隔命令。&
already 结束命令,;
紧随其后的是错误的为什么在 bash 中 & 之后 ; 会返回意外的标记错误?
在 Bash 中运行命令时,意外标记“;”附近出现语法错误
您可以使用简单的:
ping [SOME IP] & ls
或者使用子 shell
(ping [SOME IP] &) && ls
括号真的将命令放在子 shell 中吗?
通过赋值启动子 shell 并等待
这也应该适用于分组:
{ ls & ping [SOME IP]; }
按 {} vs () 分组执行一组命令
终端中的括号和大括号有什么区别?