这主要是一个格式问题,我一直无法很好地解决。
我想创建一个 bash 函数或脚本,将 wpa-passphrase 的输出转换为 /etc/network/interfaces 可以使用的格式。
WPA 请求者示例
wpa_passphrase ssid password
产生以下输出
network={
ssid="MYSSID"
#psk="passphrase"
psk=ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b
}
我需要将该输出转换为 /etc/network/interfaces 可以使用的格式
/etc/network/interface 输出格式示例:
auto wlan0
iface wlan0 inet dhcp
wpa-ssid MYSSID
wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b
我的第一个粗略解决方案是使用:
wpa_passphrase MYSSID PASSWORD |grep -E 'ssid|psk' |grep -v "#psk" |cut -d '=' -f 2
这给了我:
MYSSID
ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b
但我不知道如何将每一行放到 /etc/network/interfaces 格式中的正确位置
更新:使用我当前的解决方案
经过进一步的尝试,我设法让它与此一起工作:
while read line
do
echo "auto wlp3s0"
echo "iface wlp3s0 inet dhcp"
echo -e "\t wpa-ssid $line"
done < <(sudo wpa_passphrase $1 $2 |grep -E 'ssid' |cut -d '=' -f 2)
while read line
do
echo -e "\t wpa-psk $line"
done < <(sudo wpa_passphrase $1 $2 |grep -E 'psk' |grep -v "#psk" |cut -d '=' -f 2)
我的解决方案提供了我需要的输出,但它似乎效率不高,我仍然希望看到其他解决方案。
答案1
您可以创建一个如下函数并用于awk
根据需要格式化输出:
generate() {
sudo wpa_passphrase "$1" "$2" |
awk -F= 'BEGIN { print "auto wlan0\n" "iface wlan0 inet dhcp" }
/ssid/ { print "", "wpa-ssid", $2 }
/[^#]psk=/ { print "", "wpa-psk" , $2 }' OFS='\t'
}
然后打电话generate "my SSID" "PASSWORD"
。
输出将是:
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "my SSID"
wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b