Augeas では、現在の値を使用して属性の値を変更するにはどうすればよいですか?

Augeas では、現在の値を使用して属性の値を変更するにはどうすればよいですか?

Samba.lns で最適にカバーされる一般的な INI タイプのファイルがあるとします。次のようなエントリがあります。

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"

つまり、$basearchを に置き換えてnoarch、残りはそのままにしておきたいのです。私の実際の例はもう少し複雑です。これを augeas 内で実行できますか?

答え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 を使用している場合は、シェルで次のように実行できます。

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

関連情報