uci - 如何还原所有未分级的更改

时间:2017-07-17 15:08:25

标签: openwrt

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'

...但我不想继续并提交它们。是否有一种简单的方法可以恢复所有分阶段的更改并避免逐一进行更改?

3 个答案:

答案 0 :(得分:2)

有一个命令可以恢复所有分阶段的更改

revert  <config>[.<section>[.<option>]]     Revert the given option, section or configuration file.

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

uci revert network.vlan15

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

答案 1 :(得分:1)

我没有找到uci命令来恢复所有未提交的更改,但您可以使用一些shell脚本来解析uci changes命令的输出以获得所需的结果。这是一个示例脚本:

#!/bin/ash

# uci-revert-all.sh
# Revert all uncommitted uci changes

# Iterate over changed settings
# Each line has the form of an equation, e.g. parameter=value
for setting in $(uci changes); do

    # Extract parameter from equation
    parameter=$(echo ${setting} | grep -o '^\(\w\|[._-]\)\+')

    # Display a status message
    echo "Reverting: ${parameter}"

    # Revert the setting for the given parameter
    uci revert "${parameter}"
done

更简单的替代方法可能是使用uci revert <config>语法,例如:

#!/bin/ash

# uci-revert-all.sh
# Revert all uncommitted uci changes

for config in /etc/config/*; do
    uci revert $(basename ${config})
done

在运行LEDE 4的路由器上,这两种方法都适用于我。

答案 2 :(得分:0)

这可以通过以下命令来实现:

root@firlefanz:~# rm -rf /tmp/.uci/