为什么这个 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
才会运行。echo
curl