在 bash 脚本中使用和转义 wpa_cli set_network 命令

在 bash 脚本中使用和转义 wpa_cli set_network 命令

可以通过wpa_supplicant命令行界面连接到 wifi 网络wpa_cliwpa_cli有两种操作模式:交互模式和正常模式。在正常模式下,必须通过wpa_cli的参数传递所需的命令。

例如,要连接到网络,必须执行以下命令(以 root 身份):

wpa_cli add_network
> 0 # this is the new network's ID
wpa_cli set_network 0 ssid '"SSID_HERE"'
wpa_cli set_network 0 psk '"PASSPHRASE_HERE"'
wpa_cli enable_network 0

所有这些操作都可以编写脚本。但wpa_cli需要,对于set_network ssidset_network psk,SSID 和密码都用单引号转义双引号,如下所示:'"ssid"'.

然而,当您想要用变量的值替换 ssid 时,这种转义格式很难在脚本中遵循,并且 wpa_cli 不断返回 FAIL 退出状态,而不是 OK。已尝试以下模式:

ssid '"$ssid"' # doesn't work, sets SSID to "$ssid" instead of $ssid's value
ssid \'"$ssid"\' # doesn't work

因此,我的问题是:如何将 ssid 放入脚本中的变量中,并将其用作参数来为 wpa_cli 提供 SSID/密码?

答案1

以下模式对我有用,但我不知道它是否安全:

wpa_cli set_network 0 ssid '"'$ssid'"'

我想只有 ' ' 以及$ssid' 的值被保留。

相关内容