Augeas를 사용하면 현재 값을 사용하여 속성 값을 어떻게 수정할 수 있습니까?

Augeas를 사용하면 현재 값을 사용하여 속성 값을 어떻게 수정할 수 있습니까?

Samba.lns에서 가장 잘 다루는 일반적인 INI 유형 파일이 있다고 가정해 보겠습니다. 다음과 같은 항목이 있습니다.

attribute = value

그리고 나는하고 싶다변환 value에게 Some-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

관련 정보