首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uci -如何还原所有未分阶段的更改

uci -如何还原所有未分阶段的更改
EN

Stack Overflow用户
提问于 2017-07-17 15:08:25
回答 5查看 2.6K关注 0票数 3

uci文档说:

所有"uci set“、"uci add”、"uci rename“和"uci delete”命令都被放置在一个临时位置,并与"uci commit“一起写入闪存。

如果我做对了,首先运行一些命令,如上面提到的命令,并将更改写入运行uci commit的配置文件。例如,假设我做了以下更改..。

代码语言:javascript
复制
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,我不想继续并提交它们。是否有一种简单的方法来还原所有阶段性的更改,并避免一个一个地进行?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-07-27 08:48:29

有一个命令可以还原所有已分阶段的更改。

代码语言:javascript
复制
revert  <config>[.<section>[.<option>]]     Revert the given option, section or configuration file.

所以,在你的情况下,应该是

代码语言:javascript
复制
uci revert network.vlan15

请参阅https://openwrt.org/docs/guide-user/base-system/uci

票数 3
EN

Stack Overflow用户

发布于 2019-11-25 16:35:42

这应该可以通过以下命令实现:

代码语言:javascript
复制
root@firlefanz:~# rm -rf /tmp/.uci/
票数 4
EN

Stack Overflow用户

发布于 2021-11-16 13:24:46

这一条衬里应该能起作用:

代码语言:javascript
复制
uci changes | sed -rn 's%^[+-]?([^=+-]*)([+-]?=.*|)$%\1%' | xargs -n 1 uci revert

sed命令从阶段性更改中提取选项名称。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输出的不同格式的一些示例:

代码语言:javascript
复制
-a
+b='create new option with this value'
c='change an existing option to this value'
d+='appended to list'
e-='removed from list'

提取的选项名称如下:

代码语言:javascript
复制
a
b
c
d
e

然后,xargs -n 1将执行以下命令:

代码语言:javascript
复制
uci revert a
uci revert b
uci revert c
uci revert d
uci revert e

这就是一条龙的全部魔力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45147689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档