export $key=$val
должен работать просто великолепно в bash
. Я подозреваю, что Вашей проблемой является канал (|
). Все команды в конвейере выполняются в подоболочке. В Вашем примере, экземпляре bash
это запускает Ваш скрипт, разветвится от 2 подоболочек: один для cat $1
и другой для while read ...
. Переменные присвоены и экспортированы в подоболочке, выполняющей цикл с условием продолжения, и затем все они быстро выводятся, когда подоболочка выходит. Один способ зафиксировать это не состоит в том, чтобы породить подоболочки вообще. Вместо бесполезного использования кошки попробуйте перенаправление вместо этого:
while read ...; do
...
done < "$1"
BashFAQ 24 объясняет это в намного больших деталях.
Альтернативный подход должен просто получить файл с добавленным экспортом:
. <(sed '/^export/!s/^/export /' "$1")
<( )
замена процесса.
Как дополнительное предупреждение, так как Вы читаете переменные среды из аргумента, необходимо удостовериться что файл аргумента $1
надежный источник, таким образом, он не может сделать плохих вещей к Вашему сценарию.
Взгляните на перенаходку, это довольно полезно и гладко (и действительно загружает win8 в моих тестах, выполненных при добавлении поддержки UEFI ALT Linux).
Это не загрузчик, а скорее диспетчер начальной загрузки, таким образом, это позволит Вам выбирать между WBM и GRUB с обеими способностями к на самом деле chainload (в) соответствующем ядре.
Необходимо предоставить UUID Системного устройства системы на поисковой строке (в конце). И удалите - тег BIOS, так как Вы используете EFI для начальной загрузки.
Для нахождения UUID выполните следующее:
sudo grub-probe --target=fs_UUID /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
Я в настоящее время сталкивался с той же проблемой, но мог выяснить, что причиной был неправильный результат команды личинки подсказки. На самом деле это передавало меня неправильный путь для .efi файла.
У меня есть два диска здесь, и личинка перечисляла их как hd1 и hd2. Я мог выяснить просто использование команды личинки с опцией, нажимающей 'c' на экране личинки и выполняющей ls впоследствии.
Это перечисляет все gpt разделы и соответствующие диски, так как у меня есть различные разделы на обоих дисках I, мог легко определить, где был мой efi файл, и затем это был просто вопрос изменения местоположения записей личинки в корректный раздел, где мой efi файл находился в.
Заметьте, что путь chainloader должен соответствовать пути без точки монтирования. Можно проверить это использование дисковой утилиты на Ubuntu!
Теперь у меня есть просто ошибка при высказывании, что поисковый тип является неуказанным, но начальная загрузка приносит мне загрузчик окон без проблемы.
Относительно Вашего вопроса, почему Вы поражаете загрузчик окон при выходе из личинки, которую я предполагаю, это просто, параметры загрузки материнской платы имеют окна uefi загрузчик как следующая опция, когда личинка обойдена.
Проблема в том, что вы уже установили свой корень в ' (hd0,gpt1 )', который, как я полагаю, является (вашим /boot/efi
каталогом ), где находится ваш grub.
Следовательно, написание /boot/efi/...
эквивалентно написанию /boot/efi/boot/efi...
, которого, скорее всего, не существует.
Вы должны изменить /boot/efi/EFI/...
просто на/EFI/...