为什么URL中的&符导致Mac OS X终端中某些命令失败?


0

为什么URL中的&符导致以下命令失败?

我想通过在终端中运行Safari来打开一个网页,将URL作为参数。

这按预期工作:

open -a safari "http://endic.naver.com/search.nhn?sLn=en&searchOption=all&query=good"

但是一旦删除了引号,就无法按预期工作:

open -a safari http://endic.naver.com/search.nhn?sLn=en&searchOption=all&query=good

相反,它返回:

[3] 5395
[4] 5396
[1]   Done                    open -a safari http://endic.naver.com/search.nhn?sLn=en
[2]   Done                    searchOption=all

似乎URL中的&符号被视为“在后台运行上一个命令”,尽管URL中的&符号后面没有空格。

Answers:


2

&符号是一个命令分隔符(类似于分号;),但表示该命令将在后台运行。

如果命令由控制操作符&终止,则shell在子shell中在后台执行命令。shell不等待命令完成,返回状态为0.命令由a分隔; 按顺序执行; shell等待每个命令依次终止。返回状态是最后执行的命令的退出状态

因此,您运行了三个命令:

  • open -a safari "http://endic.naver.com/search.nhn?sLn=en 在后台
  • searchOption=all 在后台
  • query=good 在前台

后两者只是变量赋值,因此没有显示错误(通常情况下这种情况偶然发生)。


虽然URL中的&符号后面没有空格。

这两个都不需要&;结束命令:

$ ls;pwd
Applications Desktop      Documents    Downloads    Library      Movies       Music
Pictures     Projects     Public       Work
/Users/danielbeck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.