Nehmen wir an, ich habe eine generische INI-Datei, die am besten von Samba.lns abgedeckt wird. Ich habe einen Eintrag wie:
attribute = value
Und ich willverwandeln value
zu Some-VALUE-x
. Ein konkreteres Beispiel:
augtool> print /files/etc/yum.conf/main/cachedir
/files/etc/yum.conf/main/cachedir = "/var/cache/yum/$basearch/$releasever"
Und ich möchte den Wert wie folgt ändern:
"/var/cache/yum/noarch/$releasever"
Das heißt, ich möchte $basearch
durch ersetzen noarch
und den Rest so lassen. Mein eigentliches Beispiel ist etwas komplexer. Kann ich das überhaupt in augeas tun?
Antwort1
Dies ist nicht mit einem einzelnen Augeas-API-Aufruf möglich, mit aug_get und aug_set ist es jedoch in der aufrufenden Sprache möglich. Beispielsweise mit Ruby-Augeas:
aug.set("/files/etc/yum.conf/main/cachedir", aug.get("/files/etc/yum.conf/main/cachedir").sub("$basearch", "noarch"))
Wenn Sie gemäß Ihrem Beispiel Augtool verwenden, können Sie in der Shell Folgendes tun:
cachedir=$(augtool get /files/etc/yum.conf/main/cachedir | sed 's/$basearch/noarch/')
augtool set /files/etc/yum.conf/main/cachedir "$cachedir"
Antwort2
Das Shellvars_list
Standardobjektiv bietet nahezu alles, was ich brauche.
Bei einer Datei wie
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"
Ich möchte beliebige Werte idempotent an anhängen GRUB_CMDLINE_LINUX
. Dieses Objektiv analysiert diese Datei wie folgt:
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"
Wir führen ein defvar
in Augtool aus, sodass dies $v
unser Präfix darstellt.
Fügen Sie diesem Parameter einen neuen Wert hinzu CMDLINE
:
set $v/GRUB_CMDLINE_LINUX/value[last()+1] test=142
Vorhandene entfernen:
rm $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")]
Ersetzen Sie das Schlüsselpaar, dessen Schlüssel ist test=
:
set $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")] test=1234