如何通过命令行/ shell脚本从etc / wpa_supplicant / wpa_supplicant.conf中删除networkingconfiguration文件

我有多个无线networkingssid保存在我的etc / wpa_supplicant / wpa_supplicant.conf中,如下所示,我们可以从这个wpa_supplicant.conf中删除一个特定的networking

例如:在下面的networking中,可以通过shell脚本删除networkingmyssid1,然后我可以通过node.js服务器执行

network={ ssid="myssid1" scan_ssid=0 proto=WPA key_mgmt=WPA-PSK psk=5f55a9b869e9ab6d03839cae23c7243accc0ac0a12079d358328bf73ad2e0ebe } network={ ssid="myssid2" scan_ssid=0 proto=WPA key_mgmt=WPA-PSK psk=d89660510d06bbf7691f5296daae36872d697a88876c53db7de91aa85df4f68b } network={ ssid="myssid3" scan_ssid=0 proto=WPA key_mgmt=WPA-PSK psk=d635b33481a13b28a67e8964f58343cb19bc8c85c67cc56ee9bfe0c302914a5f } 

Solutions Collecting From Web of "如何通过命令行/ shell脚本从etc / wpa_supplicant / wpa_supplicant.conf中删除networkingconfiguration文件"

使用wpa_cli你可以这样做:

1:

 wpa_cli remove_network 0 

其中0是运行wpa_cli add_network后得到的network_id。 它将删除网络并断开使用它的任何接口。

请注意, network id不是文件中网络的顺序。 您可以使用wpa_cli list_networks获取配置的网络

2:

 wpa_cli save_config 

这将保持更改,相应的网络块将从etc/wpa_supplicant/wpa_supplicant.conf

你可以写你自己。 一些非常丑陋的Quick-n-Dirty Code会是例如:

 file="/etc/wpa_supplicant/wpa_supplicant.conf" foo="$(cat "$file" | awk '/myssid3/ { flag=1 }; flag==0 { print $0 }; /network={/ { flag=0 }' )" if echo -e "$foo" | tail -1 | grep -q 'network={'; then foo=$(echo -e "$foo" | head -n -1) fi echo -e "$foo" > "$file" 

我能够用下面的脚本完成它:

 SSID_TO_DELETE=$1 sed -n "1 !H 1 h $ { xs/[[:space:]]*network={\n[[:space:]]*ssid=\"${SSID_TO_DELETE}\"[^}]*}//gp }" /etc/wpa_supplicant/wpa_supplicant.conf > /etc/wpa_supplicant/wpa_supplicant.conf 
 SSID=$1 temp_var=$(sudo awk -v RS= '!/${SSID}/{printf $0""RT}' etc/wpa_supplicant/wpa_supplicant.conf) echo -e "$temp_var" | sudo tee etc/wpa_supplicant/wpa_supplicant.conf 

临时变量是需要的,因为这是我发现实际上使awk写入他提交处理的最简单的方法。 要查看更改wpa_supplicant.conf的效果,请执行以下操作

 svc wifi disable && svc wifi enable 

一些参考: