如何使用 sed 在 Node JS 中的 Raspberry Pi 上编辑 wpa_supplicant.conf?

How do you edit wpa_supplicant.conf on a Raspberry Pi in Node JS with sed?

我的配置文件如下所示:

ssid="oldssid"
psk="oldpassword"

我正在使用以下代码尝试在 Node JS 应用程序中编辑我的 Wifi 设置,但它没有对文件进行任何更改。任何建议将不胜感激!

        var ssid_command = "sed -i \'s/ssid=\"oldssid\"/ssid=\"" + newssid + "\"/\' /etc/wpa_supplicant/wpa_supplicant.conf";
        var psk_command = "sed -i \'s/psk=\"oldpassword\"/psk=\"" + newpassword + "\"/\' /etc/wpa_supplicant/wpa_supplicant.conf";
        require('child_process').exec(ssid_command, function (msg) { console.log(msg) });
        require('child_process').exec(psk_command, function (msg) { console.log(msg) });

如果你的 conf 文件的内容是这样的...

ssid=oldssid
psk=oldpassword

...然后您生成的 shell 命令...

sed -i 's/ssid="oldssid"/ssid="newssid"/' wpa_supplicant.conf

...引用级别过多。

单引号内的所有内容都被 shell 视为一个不间断的、未解析的字符串,并按原样传递给 sed。 Sed 将引号视为要匹配和替换的普通字符 - 因此会查找 oldssid 周围的标记,并且可能找不到,因为它们不存在于文件中。

您想生成更像这样的东西:

sed -i 's/ssid=oldssid/ssid=newssid/' wpa_supplicant.conf

...您可以这样做...

var command = "sed -i 's/ssid=oldssid/ssid=" + newssid + "/' wpa_supplicant.conf";

PS 您也不需要转义 javascript 中双引号字符串中的单引号 - 虽然这样做不会破坏任何东西

原来我所要做的就是在开头添加 sudo 这样我就有了编辑文件的权限。