2017-05-17 12 views
1

Macの自動プロキシURLが設定されているかどうかを確認しようとしています。 まず、私はポート番号シェルスクリプトの引用符付き変数

port=$(route get example.com | grep interface | sed 's/.*\(...\)/\1/') 

を取得したいその後、アクティブなネットワークサービス

service=$(networksetup -listnetworkserviceorder | grep $port | sed 's/,.*$//; s/^.*: //') 

を得るために、ポート番号を使用して、最後に、私は自動プロキシ情報を取得するためにアクティブなネットワークサービスを使用します

autoproxy=$(networksetup -getautoproxyurl \"$service\") 

スペースを含むネットワークサービスに問題が発生しています。たとえば、Wi-Fiは正常に動作しますが、Apple USBイーサネットアダプタはありません。 解決策は、引用符(\ "$ service \")をエスケープすると思った 奇妙なことは、$ service($ serviceが$ Apple USBイーサネットアダプタ)をエコーすると、 Apple USB Ethernet Adapter "変数$ serviceの代わりにこの正確な結果をコピー&ペーストすると、私が期待していた結果が得られます(URL:(null)Enabled:No) ただし、元々書かれていたが、パラメータエラー(エラー:パラメータが有効でない)を返します。

これ

があるとして、スクリプトを実行した結果である:

autoproxy=$(networksetup -getautoproxyurl "$service") 
echo $autoproxy 
Error: The parameters were not valid. 

しかし、私はコピーして、$サービスの出力を貼り付けた場合、それは私が期待していた結果を返します。

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 
+0

'$ service'が正しく設定されていれば' autoproxy = $(networksetup -getautoproxyurl "$ service") '*は動作します。これらのコマンドを実行する前に 'set -x'を使って試してみましょう。警告:出力は実行されているコマンドと同等のものを出力するので、やや誤解を招く可能性があります。たとえば、エスケープされた引用符付きのバージョンでは '++ networksetup -getautoproxyurl '' Apple 'USB Ethernet' Adapter '''を出力します - 二重引用符が一部として扱われていることを示すために一重引用符が追加されています1つの議論の周りを回るのではなく、議論の –

答えて

0

autoproxy式のservice変数に ""を使用しています。

関連する問題