Digamos que tengo algún archivo genérico de tipo INI, cubierto mejor por Samba.lns. Tengo una entrada como:
attribute = value
y quierotransformar value
a Some-VALUE-x
. Para un ejemplo más concreto:
augtool> print /files/etc/yum.conf/main/cachedir
/files/etc/yum.conf/main/cachedir = "/var/cache/yum/$basearch/$releasever"
Y quiero cambiar el valor a:
"/var/cache/yum/noarch/$releasever"
Es decir, quiero reemplazar $basearch
y noarch
dejar el resto en paz. Mi ejemplo real es un poco más complejo. ¿Puedo incluso hacer esto dentro de augeas?
Respuesta1
No puedes hacer esto con una sola llamada a la API de Augeas, pero con aug_get y aug_set puedes hacerlo en el lenguaje de llamada. por ejemplo, usando ruby-augeas:
aug.set("/files/etc/yum.conf/main/cachedir", aug.get("/files/etc/yum.conf/main/cachedir").sub("$basearch", "noarch"))
Si está utilizando augtool según su ejemplo, en Shell podría hacer:
cachedir=$(augtool get /files/etc/yum.conf/main/cachedir | sed 's/$basearch/noarch/')
augtool set /files/etc/yum.conf/main/cachedir "$cachedir"
Respuesta2
La Shellvars_list
lente original se acerca a proporcionarme lo que necesitaba.
Dado un archivo como
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"
Quiero agregar valores arbitrarios de forma idempotente GRUB_CMDLINE_LINUX
. Esta lente analiza este archivo de la siguiente manera:
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"
Haremos un defvar
in augtool para que $v
represente nuestro prefijo.
Agregue un nuevo valor a este CMDLINE
parámetro:
set $v/GRUB_CMDLINE_LINUX/value[last()+1] test=142
Eliminar los existentes:
rm $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")]
Reemplace el par de claves cuya clave es test=
:
set $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")] test=1234