Здесь есть две проблемы. Во-первых, ваша команда sed
заключена в одинарные кавычки (''
), поэтому переменная не раскрывается:
$ echo $ruledeck
/praj/test/drc_tsn/test1
$ echo '$ruledeck'
$ruledeck
Я вижу, вы заключили переменную в двойные кавычки внутри команды sed
, но это ничего не изменит, так как все это заключено в одинарные кавычки. Вместо этого вам нужно заключить его в двойные кавычки:
sed -e "3s/$/$ruledeck/" file
Однако и это сломается:
$ sed -e "3s/$/$ruledeck/" file
sed: -e expression #1, char 8: unknown option to `s'
Это потому, что ваша переменная содержит /
, но вы также используете /
в качестве разделителя для оператора подстановки(s///
). Вам нужен другой разделитель. Это должно делать то, что вы хотите:
$ sed -e "3s|$|$ruledeck|" file
#############Actions#################
set a [project $p get_action ICV_DRC]
action $a set_parameter "ruledeck"/praj/test/drc_tsn/test1
action $a set_parameter "options"
Но это все равно не совсем правильно, если в конце строки нет пробела. Чтобы также добавить пробел, но только если его еще нет, используйте\?
(пробел и экранированный вопросительный знак ), чтобы соответствовать «0 или 1 пробелу». Все это вместе дает:
$ sed -e "3s| \?$| $ruledeck|" file
#############Actions#################
set a [project $p get_action ICV_DRC]
action $a set_parameter "ruledeck" /praj/test/drc_tsn/test1
action $a set_parameter "options"
Забудьте об os -prober, добавьте статическую запись grub /etc/grub/40_custom
.
menuentry 'Windows 10' -class windows {
search --fs-uuid --no-floppy --set=root XXXX-XXX
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
Замените XXXX -XXXX на UUID (, а не на PARTUUID ), найденный изblkid /dev/sdXY
(или /dev/nvmeXnYpZ
, в зависимости от того, что применимо )для системного раздела EFI, обычно в формате FAT. Применяется к системам UEFI.