Macos shell脚本中引用的变量
我正在尝试确定Mac上的自动代理URL是否已配置。 首先,我想得到端口号Macos shell脚本中引用的变量,macos,variables,Macos,Variables,我正在尝试确定Mac上的自动代理URL是否已配置。 首先,我想得到端口号 port=$(route get example.com | grep interface | sed 's/.*\(...\)/\1/') 然后使用端口号获取活动网络服务 service=$(networksetup -listnetworkserviceorder | grep $port | sed 's/,.*$//; s/^.*: //') 最后,我使用主动网络服务获取自动代理信息 autoproxy=$(
port=$(route get example.com | grep interface | sed 's/.*\(...\)/\1/')
然后使用端口号获取活动网络服务
service=$(networksetup -listnetworkserviceorder | grep $port | sed 's/,.*$//; s/^.*: //')
最后,我使用主动网络服务获取自动代理信息
autoproxy=$(networksetup -getautoproxyurl \"$service\")
我遇到了任何包含空格的网络服务的问题。例如,Wi-Fi可以正常工作,但苹果USB以太网适配器却不能。
我认为解决办法是避开引号(\“$service\”)
奇怪的是,如果我回显$service(其中$service是Apple USB Ethernet Adapter),它返回一个正确引用的“Apple USB Ethernet Adapter”结果,如果我复制并粘贴这个精确的结果作为变量$service的替换,我会得到我期望的结果(URL:(null)Enabled:No)
但是,按照最初编写的方式运行命令会返回参数错误(错误:参数无效)
这是按原样运行脚本的结果:
autoproxy=$(networksetup -getautoproxyurl "$service")
echo $autoproxy
Error: The parameters were not valid.
但是,如果我复制并粘贴$service的输出,那么它将返回我期望的结果
service=$(networksetup -listnetworkserviceorder | grep $port | sed 's/,.*$//; s/^.*: //')
echo \"$service\"
"Apple USB Ethernet Adapter"
autoproxy=$(networksetup -getautoproxyurl "Apple USB Ethernet Adapter")
echo $autoproxy
URL: (null) Enabled: No
您正在使用“”作为autoproxy表达式中的服务变量。您正在使用“”作为autoproxy表达式中的服务变量。autoproxy=$(网络设置-getautoproxyurl“$service”)
如果设置正确,则应该可以工作。在运行这些命令之前,请尝试使用set-x
,并查看它的输出。警告:输出可能有点误导,因为它打印的内容相当于正在执行的命令。例如,对于带有转义引号的版本,它将打印++networksetup-getautoproxyurl'“Apple'USB Ethernet'Adapter”
——添加单引号表示双引号被视为参数的一部分,而不是围绕单个参数进行处理。autoproxy=$(networksetup-getautoproxyurl“$service”)如果正确设置了$service
,则
应该可以工作。在运行这些命令之前,请尝试使用set-x
,并查看它的输出。警告:输出可能会有点误导,因为它打印的内容与正在执行的命令相同。例如,如果您的版本带有转义引号,它将打印++networksetup-getautoproxyurl“Apple”USB Ethernet“Adapter”
——添加单引号表示双引号被视为参数的一部分,而不是围绕单个参数。