为什么这个shell脚本:
$ curl -d "asd" 0.0.0.0/abc & echo "abc";
Run Code Online (Sandbox Code Playgroud)
导致我不得不enter在它再次进入外壳之前按下。这curl只是一个简单的 web 服务器的 post 请求,它返回abc.
但是,此脚本不需要我在再次进入 shell 之前按 Enter
$ echo "abc" & echo "abc"
Run Code Online (Sandbox Code Playgroud)
&将curl命令发送到后台,无论何时运行,它都会在后台运行,shell 不会等待它(它会打印作业号和 PID)。相反,shell 继续运行 run 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
Run Code Online (Sandbox Code Playgroud)
最后一行的开头有提示。
点击Enter这里,shell 会打印另一个提示,此时它还会检查后台作业是否已完成,并打印一条关于此的注释:
[1]+ Exit 7 curl -d "asd" 0.0.0.0/abc
bash ~ $
Run Code Online (Sandbox Code Playgroud)
现在,我不确定你到底在做什么,但是由于这个原因,将后台作业打印到终端有点尴尬,所以你可能想要重定向curl其他地方的输出,或者在前台运行它. 例如,curl something; echo curl done将运行curl第一个,然后echo,和curl something && echo curl done将只运行echo,如果curl没有失败。
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |