4

私は 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"

それらをどのように通過させるのですか?

4

3 に答える 3

8

最初に追加IFS=$'\n'しますが、for ループ内の変数を二重引用符で囲みません。入力フィールドの区切り記号には、デフォルトでスペースとタブが含まれます。

于 2012-11-02T16:48:07.580 に答える
4

問題は、for ループを 1 行に 1 回ループさせたいのですが、bash の for ループは引数ごとに 1 回ループさせることです。変数を引用符で囲むことにより、変数を 1 つの引数にまとめます。これを回避するには、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
于 2012-11-02T16:57:06.730 に答える
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
于 2012-11-02T15:34:55.557 に答える