【问题标题】:Add a kernel parameter with sed to grub使用 sed 将内核参数添加到 grub
【发布时间】:2016-08-19 14:52:14
【问题描述】:

我正在编写一个 bash 脚本以在 linux 系统上以非交互方式启用休眠。为此,我需要在一段时间的特定行上插入一个包含斜杠的 shell 变量,在该行的引号内。

要编辑的文件的相关部分如下所示:

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

我需要改成这样:

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"
GRUB_CMDLINE_LINUX=""

添加的参数由shell变量提供。

我试过了:

sed -i '\*^GRUB_CMDLINE_LINUX_DEFAULT* s*"$* '"$(grub_resume_boot_option)"'"*' /etc/default/grub

我的目标是:“查找以模式“GRUB_CMDLINE_LINUX_DEFAULT”开头的行,并将最后一个“替换为给定的模式。使用 * 作为分隔符来保留扩展变量中的斜线。"

但是,如果行尾有空格,则命令会失败。有什么办法让它不考虑行尾的空格吗?

另外,如果有更简单或可读的解决方案,我会很感兴趣。

【问题讨论】:

  • 如何确定resume=/dev/disk/by-partuuid/c5a.... 的值?

标签: linux bash hibernate shell sed


【解决方案1】:

你可以这样做:

sed -i 's#^\(GRUB_CMDLINE_LINUX_DEFAULT="quiet\)"$#\1 resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"#' /etc/default/grub

示例:

$ sed 's#^\(GRUB_CMDLINE_LINUX_DEFAULT="quiet\)"$#\1 resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"#' <<<'GRUB_CMDLINE_LINUX_DEFAULT="quiet"'
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"

【讨论】:

  • 这假设您知道该行的全部内容,不是吗?
【解决方案2】:

发件人:https://serverfault.com/questions/885684/editing-the-value-of-grub-cmdline-linux-default-thru-bash-script

sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/&newstuff /' /etc/default/grub

这会将“newstuff”添加到参数列表的开头。例子:

sed 's/^GRUB_CMDLINE_LINUX_DEFAULT="/&newstuff /' <<< 'GRUB_CMDLINE_LINUX_DEFAULT="quiet"'
GRUB_CMDLINE_LINUX_DEFAULT="newstuff quiet"
sed 's/^GRUB_CMDLINE_LINUX_DEFAULT="/&newstuff /' <<< 'GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"'
GRUB_CMDLINE_LINUX_DEFAULT="newstuff quiet splash"

【讨论】:

    【解决方案3】:
    sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& $(grub_resume_boot_option)/" /etc/default/grub
    

    【讨论】:

    • 为什么你更喜欢这个,比如说,最高投票的答案?你能解释一下你在做什么吗?
    猜你喜欢
    • 2017-10-26
    • 2017-08-28
    • 2020-07-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2014-05-12
    • 2010-09-17
    • 2017-06-21
    相关资源
    最近更新 更多