2016-04-26 8 views
2

Linuxシステムで非対話的にハイバネーションを有効にするためのbashスクリプトを書いています。この目的のために、しばらくの間、スラッシュを含むシェル変数を、その行にある引用符の中に挿入する必要があります。grubにsedでカーネルパラメータを追加する

このように編集されたルックスをbにファイルの関連部分:

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="" 

追加パラメータはシェル変数によって提供されます。私が目指していた

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

ロジックた:GRUB_CMDLINE_LINUX_DEFAULTを「パターンで始まる行を探し、 『』、および最後に取って代わる」与えられたパターンで

は、私はこれを試してみました。拡張変数のスラッシュを保存するには、区切り記号として*を使用してください。 "

ただし、行の最後に空白があるとコマンドが失敗します。末尾にスペースを入れない方法はありますか?アカウントへのラインも

、これまでよりシンプルまたは読みやすい解決策がある場合、私は非常に興味がある

+0

「resume =/dev/disk/by-partuuid/c5a ....」の値はどのようにして決められますか? – shellter

答えて

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"