Wpa-Supplicant
wpa_cli:互動式 shell 工作,單個命令失敗?
我正在嘗試使用 wpa_cli 連接到 wifi。我跑
$ wpa_cli add_network
了,回來了0,跑了$ wpa_cli set_network 0 ssid "my ssid"
。但這失敗了。然後我嘗試了互動式shell,執行set_network 0 ssid "my ssid"
並獲得了OK?不應該都失敗或執行正常嗎?為什麼只有一個失敗?
shell 做了一些叫做分詞的事情(你可以詳細閱讀)。對於大多數情況(以及您的情況),這意味著在命令行上,如果您想將一小組特殊字元中的任何一個傳遞給程序,您必須保護它們。為了保護它們,您必須在它們前面加上反斜杠 (
\
) 或用引號將相關文本括起來。旁注:單引號在某種意義上“更強”,因為其中沒有字元具有特殊含義。雙引號允許某些字元在內部保留其特殊含義。
正如您可能從“分詞”這個名稱中猜到的那樣,當您想將其傳遞給程序時,空白是您需要保護的事情之一。但是從上面的引用規則可以看出,引號和反斜杠也需要受到保護。
問題是 wpa_cli 期望在 SSID 周圍有(雙?)引號,但你的會被外殼“吃掉”,因為它們沒有受到保護。現在用
wpa_cli set_network 0 ssid '"my ssid"'
單引號保護雙引號, wpa_cli 命令被"my ssid"
視為它的第四個參數。