uci文档说:
所有"
uci set“、"uci add”、"uci rename“和"uci delete”命令都被放置在一个临时位置,并与"uci commit“一起写入闪存。
如果我做对了,首先运行一些命令,如上面提到的命令,并将更改写入运行uci commit的配置文件。例如,假设我做了以下更改..。
root@OpenWrt:~# uci changes
network.vlan15.ifname='eth1.15'
network.vlan15.type='bridge'
network.vlan15.proto='static'
network.vlan15.netmask='255.255.255.0'
network.vlan15.ipaddr='192.168.10.0'...but,我不想继续并提交它们。是否有一种简单的方法来还原所有阶段性的更改,并避免一个一个地进行?
发布于 2021-07-27 08:48:29
有一个命令可以还原所有已分阶段的更改。
revert <config>[.<section>[.<option>]] Revert the given option, section or configuration file.所以,在你的情况下,应该是
uci revert network.vlan15发布于 2019-11-25 16:35:42
这应该可以通过以下命令实现:
root@firlefanz:~# rm -rf /tmp/.uci/发布于 2021-11-16 13:24:46
这一条衬里应该能起作用:
uci changes | sed -rn 's%^[+-]?([^=+-]*)([+-]?=.*|)$%\1%' | xargs -n 1 uci revertsed命令从阶段性更改中提取选项名称。xargs命令对每个提取的选项执行revert命令。
现在让我们深入研究每一件事:
uci changes打印准备好的更改,然后通过管道发送到sed命令。
sed opton -r支持扩展正则表达式,而-n禁止模式匹配的自动打印。
sed命令s用于搜索和替换,%用作搜索和替换项的分离字符。
uci变更行有不同的格式。
删除的配置选项以-作为前缀。添加的配置选项以+更改后的选项为前缀,没有前缀。
为了匹配前缀,使用了[+-]?。问号意味着,方括号中的一个字符可以是可选的。
选项名将与模式[^=+-]*匹配。只要该字符不是=+-之一,该正则表达式就具有任意数量的字符的含义。它位于圆括号内,将其标记为组,以便稍后重用它。
下一个模式(+-?=.*\)也是一个模式组。有两组人被管子吐出来了。第二部分是简单的部分,意思是根本没有字符。当uci选项被删除时,就会发生这种情况。第一部分意味着字符=可以使用+或-作为可选的前缀。在=之后可以是一个或多个由.*指示的字符。=<value>发生在添加的配置上。如果选项是列表,则-或+的前缀指示该值已从列表中删除或添加到列表中。
在替换模式中,整个行被第一个组替换为它的引用\1。换句话说:只打印选项名。
然后将所有选项名发送给xargs。在选项-n 1 xargs中,对sed发送的每一个option_name都删除uci revert <option_name>。
以下是uci changes输出的不同格式的一些示例:
-a
+b='create new option with this value'
c='change an existing option to this value'
d+='appended to list'
e-='removed from list'提取的选项名称如下:
a
b
c
d
e然后,xargs -n 1将执行以下命令:
uci revert a
uci revert b
uci revert c
uci revert d
uci revert e这就是一条龙的全部魔力。
https://stackoverflow.com/questions/45147689
复制相似问题