使用 Augeas,我如何使用當前值修改屬性的值?

使用 Augeas,我如何使用當前值修改屬性的值?

假設我有一些通用的 INI 類型文件,Samba.lns 很好地涵蓋了這些文件。我有一個條目,例如:

attribute = value

我想要轉換 valueSome-VALUE-x。更具體的例子:

augtool> print /files/etc/yum.conf/main/cachedir
/files/etc/yum.conf/main/cachedir = "/var/cache/yum/$basearch/$releasever"

我想將值更改為:

"/var/cache/yum/noarch/$releasever"

也就是說,我想替換$basearchnoarch並保留其餘部分。我的實際例子有點複雜。我甚至可以在奧古斯內做到這一點嗎?

答案1

您無法透過單一 Augeas API 呼叫來完成此操作,但使用 aug_get 和 aug_set 您可以在呼叫語言中完成此操作。例如使用 ruby​​-augeas:

aug.set("/files/etc/yum.conf/main/cachedir", aug.get("/files/etc/yum.conf/main/cachedir").sub("$basearch", "noarch"))

如果您在範例中使用 augtool,則在 shell 中您可以執行以下操作:

cachedir=$(augtool get /files/etc/yum.conf/main/cachedir | sed 's/$basearch/noarch/')
augtool set /files/etc/yum.conf/main/cachedir "$cachedir"

答案2

庫存鏡頭Shellvars_list幾乎​​可以滿足我的需求。

給定一個文件,例如

GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vgroot/lvswap rd.lvm.lv=vgroot/lvroot"
GRUB_DISABLE_RECOVERY="true"

我想以冪等方式將任意值附加到GRUB_CMDLINE_LINUX.該鏡頭解析該檔案如下:

augtool> print $v
/files/home/c14027/default-grub-sample
/files/home/c14027/default-grub-sample/GRUB_TIMEOUT
/files/home/c14027/default-grub-sample/GRUB_TIMEOUT/quote = ""
/files/home/c14027/default-grub-sample/GRUB_TIMEOUT/value = "5"
/files/home/c14027/default-grub-sample/GRUB_DEFAULT
/files/home/c14027/default-grub-sample/GRUB_DEFAULT/quote = ""
/files/home/c14027/default-grub-sample/GRUB_DEFAULT/value = "saved"
/files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU
/files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU/quote = ""
/files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU/value = "true"
/files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT
/files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT/quote = "\""
/files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT/value = "console"
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/quote = "\""
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[1] = "crashkernel=auto"
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[2] = "rd.lvm.lv=vgroot/lvsap"
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[3] = "rd.lvm.lv=vgroot/lvroot"
/files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY
/files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY/quote = "\""
/files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY/value = "true"

我們將defvar在 augtool 中執行一個操作,以便$v代表我們的前綴。

在該參數中新增值CMDLINE

set $v/GRUB_CMDLINE_LINUX/value[last()+1] test=142

刪除現有的:

rm $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")]

替換密鑰為 的密鑰對test=

set $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")] test=1234

相關內容