Нет, не можете.
Если вы хотите использовать функцию в текущей оболочке, просто определив ее, а затем используйте ее позже:
$ foo() { echo "Inside function"; }
$ foo
Inside function
До дня Shellshock вы можете сохранить функцию внутри переменной, экспортировать переменную и использовать функцию в подпрограмме. -shell, поскольку bash
поддерживает функцию экспорта, bash
поместит определение функции в переменную среды , например:
foo=() {
echo "Inside function"
}
, затем интерпретирует функцию, заменив =
с пробелом. Нет намерения помещать функцию в переменную, и ссылка на переменную будет выполнять функцию.
Теперь, после того, как Стефан Шазелас обнаружил ошибку, эта функция была удалена , определение функции больше не хранится в простой переменной среды. Теперь экспортируемые функции будут кодироваться добавлением префикса BASH_FUNC_
и суффикса %%
, чтобы избежать конфликтов с переменными среды. Интерпретатор bash
теперь может определять, являются ли они функцией оболочки, независимо от содержимого переменных. Вам также необходимо определить функцию и явно экспортировать ее, чтобы использовать в суб-оболочке:
$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function
В любом случае, если ваш пример работал с вашим текущим bash
, значит, вы используете уязвимую версию.
Fedora 26 использует Anaconda в качестве установщика. Anaconda не делает различий между двумя этапами GRUB2 при установке загрузчика; Вы либо устанавливаете GRUB2 полностью, либо не устанавливаете вообще:
If you choose not to install a boot loader for any reason, you will not be able to boot the system directly, and you must use another boot method, such as a stand-alone commercial boot loader application. Use this option only if you are sure you have another way to boot your system. - Source https://docs.fedoraproject.org/f26/install-guide/install/Installing_Using_Anaconda.html#sect-installation-gui-storage-partitioning-bootloader
Короче говоря, если вы не установите GRUB2 из Fedora/Anaconda, вам будет очень больно. Вот ваш лучший выбор:
Другими словами, вы делегируете право собственности на процесс загрузки Fedora.
Вот примерно как выполнить второй шаг:
/boot
, если он еще не смонтирован:mount /boot
/etc/fstab
для автоматического монтирования загрузочного раздела Ubuntu:mkdir /mnt/ubuntu
echo "/dev/sda5 /mnt/ubuntu ext4 defaults,ro 0 0" >> /etc/fstab
mount -t ext4 /dev/sda5 /mnt/ubuntu
/etc/grub.d/40_custom
:menuentry 'Ubuntu' --class gnu-linux --class gnu --class os $menuentry_id_option 'ubuntu-xyz' {
set root='hd0,msdos5'
configfile /mnt/ubuntu/grub2/grub.cfg
}
grub2-mkconfig -o /boot/grub2/grub.cfg
Этот процесс является деликатной процедурой. Это лучшее -решение, учитывая, что передо мной нет вашего компьютера. Не удивляйтесь, если это не сработает . Сделайте все необходимые резервные копии и продолжайте с полным признанием того, что все может пойти еще хуже; Возможно, вам придется стереть диск и начать заново.