[augeas-devel] Errors deleting comments with Shellvars

Sam Eiderman sameid at google.com
Tue Apr 28 11:35:22 UTC 2020


Hi,

I'm using augeas to edit /etc/default/grub which is parsed using the
Shellvars lens.

I have a file that looks like this:
-----
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
-----

And the tree looks the following way:
-----
augtool> print /files/etc/default/grub/
/files/etc/default/grub
/files/etc/default/grub/#comment[1] = "If you change this file, run
'update-grub' afterwards to update"
/files/etc/default/grub/#comment[2] = "/boot/grub/grub.cfg."
/files/etc/default/grub/#comment[3] = "For full documentation of the
options in this file, see:"
/files/etc/default/grub/#comment[4] = "info -f grub -n 'Simple configuration'"
/files/etc/default/grub/GRUB_DEFAULT = "0"
/files/etc/default/grub/GRUB_TIMEOUT = "5"
/files/etc/default/grub/GRUB_DISTRIBUTOR = "`lsb_release -i -s 2>
/dev/null || echo Debian`"
/files/etc/default/grub/GRUB_CMDLINE_LINUX_DEFAULT = "\"quiet\""
/files/etc/default/grub/GRUB_CMDLINE_LINUX = "\"\""
/files/etc/default/grub/#comment[5] = "Uncomment to enable BadRAM
filtering, modify to suit your needs"
/files/etc/default/grub/#comment[6] = "This works with Linux (no patch
required) and with any kernel that obtains"
/files/etc/default/grub/#comment[7] = "the memory map information from
GRUB (GNU Mach, kernel of FreeBSD ...)"
/files/etc/default/grub/#comment[8] =
"GRUB_BADRAM=\"0x01234567,0xfefefefe,0x89abcdef,0xefefefef\""
/files/etc/default/grub/#comment[9] = "Uncomment to disable graphical
terminal (grub-pc only)"
/files/etc/default/grub/#comment[10] = "GRUB_TERMINAL=console"
/files/etc/default/grub/#comment[11] = "The resolution used on
graphical terminal"
/files/etc/default/grub/#comment[12] = "note that you can use only
modes which your graphic card supports via VBE"
/files/etc/default/grub/#comment[13] = "you can see them in real GRUB
with the command `vbeinfo'"
/files/etc/default/grub/#comment[14] = "GRUB_GFXMODE=640x480"
/files/etc/default/grub/#comment[15] = "Uncomment if you don't want
GRUB to pass \"root=UUID=xxx\" parameter to Linux"
/files/etc/default/grub/#comment[16] = "GRUB_DISABLE_LINUX_UUID=true"
/files/etc/default/grub/#comment[17] = "Uncomment to disable
generation of recovery mode menu entries"
/files/etc/default/grub/#comment[18] = "GRUB_DISABLE_RECOVERY=\"true\""
/files/etc/default/grub/#comment[19] = "Uncomment to get a beep at grub start"
/files/etc/default/grub/#comment[20] = "GRUB_INIT_TUNE=\"480 440 1\""
-----

I want to change the following part (if exists):
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
to
# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console

When I "rm /files/etc/default/grub/#comment[10]" and "save" I get an
undesired result, the comments below get scrambled - some even switch
prefixed spaces:
-----
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#The resolution used on graphical terminal

# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
# GRUB_GFXMODE=640x480
#Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux

# GRUB_DISABLE_LINUX_UUID=true
#Uncomment to disable generation of recovery mode menu entries

# GRUB_DISABLE_RECOVERY="true"
#Uncomment to get a beep at grub start

# GRUB_INIT_TUNE="480 440 1"
-----

I suspect this has something to do with how "del" is implemented and
how the tree is reconstructed back to string.

Augeas version is 1.11

Will appreciate any help.





More information about the augeas-devel mailing list