Bashスクリプトで現在接続されているwifiネットワークssidを取得したい。バックアップスクリプトを記述しようとしています。このスクリプトは、自宅のWi-Fiネットワークに接続されている場合、NASサーバーにバックアップを実行します。 ip route
コマンドを調べましたが、基本的な情報のみが返されます-
以下は、1つのワイヤレスデバイスを使用して接続していると仮定した場合に、探しているものを提供します。
nmcli -t -f ssid dev wifi| cut -d\' -f2
iwgetid -r
または
iwgetid wlan0 -r
このコマンドは、接続されているワイヤレスアダプターのSSIDを返します(1つしかない場合)。
iwconfig | grep ESSID | sed -e 's/.*ESSID:"\(.*\)".*/\1/'
また、端末では警告が表示されますが、stderrでは重要ではありません。
remi@Host~$id:~$ id=$(iwconfig | grep ESSID | sed -e 's/.*ESSID:"\(.*\)".*/\1/')
eth0 no wireless extensions.
lo no wireless extensions.
virbr0 no wireless extensions.
tap0 no wireless extensions.
remi@Host:~$ echo $id
CISPI
どのように「iwconfig wlan0 | sed -e '/ESSID/!d' -e 's/.*ESSID:"/"/'
?」
私はこれを試しました:
iwconfig wlan0 | grep ESSID | cut -d\" -f2
nmcli -t -f NAME connection show --active
-t
出力を「簡潔」にして、ヘッダーを作成しない-f NAME
ssidのみを表示します--active
アクティブな接続のみを表示しますNetworkManager-1.8.4では、これにより正しい結果が生成されました。
LANG=C nmcli -t -f active,ssid dev wifi | grep ^yes | cut -d: -f2-
コマンドのすべての部分には理由があります
LANG=C
は、ローカライズされた文字列でgrepを使用しているため、英語を強制するためですnmcli ... -f active,ssid ...
は、yes:myssid
no:otherssid
の形式でアクティブステータスのssidを出力しますgrep ^yes
アクティブな接続をフィルタリングしますが、テキスト「yes」のSSIDはフィルタリングしないため、^
の理由ですcut ... -f2-
は、最初のセパレーターの後の行の残りを出力します。そのため、SSIDにセパレーターを含めることができます