bash 中的分号暂停

bash 中的分号暂停

为什么这个 shell 脚本会这样:

$ curl -d "asd" 0.0.0.0/abc & echo "abc";

enter结果我必须在它再次进入外壳之前按下。这curl只是一个对简单 Web 服务器的 post 请求,该服务器返回abc.

但是,这个脚本不需要我在再次进入 shell 之前按 Enter 键

$ echo "abc" & echo "abc"

答案1

&将命令发送curl到后台,只要运行它就会在后台运行,shell 不会等待它(它会打印作业号和 PID)。相反,shell 继续运行echo,由于它是内置的,因此可能比 运行得更快curl,因此 shell 结束echo并打印提示符 curl产生任何输出。

例如我用 Bash 得到的输出:

bash ~ $ curl -d "asd" 0.0.0.0/abc & echo "abc";
[1] 26757
abc
bash ~ $ curl: (7) Failed to connect to 0.0.0.0 port 80: Connection refused

最后一行的开头有提示。

点击Enter此处会让 shell 打印另一个提示,此时它还会检查后台作业是否已完成,并打印相关注释:

[1]+  Exit 7                  curl -d "asd" 0.0.0.0/abc
bash ~ $ 

现在,我不确定你到底在做什么,但是因此将后台作业打印到终端有点尴尬,所以你可能想要重定向curl其他地方的输出,或者在前台运行它。例如,首先curl something; echo curl done运行curl,然后运行echo,并且只有在没有失败的情况下curl something && echo curl done才会运行。echocurl

相关内容