我使用的是Mac OS 10.7.x,需要查询网络服务,以报告针对服务定义的接口以及针对每个接口设置的dns服务器。
servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ;
for interface in $servicesAre ; do
printf " \nFor $interface we have:\n \n" ;
networksetup -getdnsservers $interface ;
done
我的问题是接口初始变量列表中的空格:
"USB Ethernet"
"Display Ethernet"
"Wi-Fi"
"Bluetooth PAN"
如何通过?
答案 0 :(得分:7)
将IFS=$'\n'
添加到开头,但不要在for循环中的变量周围添加双引号。输入字段分隔符默认包含空格和制表符。
答案 1 :(得分:3)
问题是你希望for循环每行循环一次,但是每个参数一次循环bash循环。通过将变量括在引号中,可以将其合并为一个参数。为避免这种情况,我建议放弃for循环和变量,改为使用read
和while循环:
networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/' |
while read interface; do
printf " \nFor $interface we have:\n \n" ;
networksetup -getdnsservers $interface ;
done
答案 2 :(得分:1)
尝试用双引号括起变量:
servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ;
for interface in "$servicesAre"; do
printf " \nFor $interface we have:\n \n" ;
networksetup -getdnsservers "$interface" ;
done