在我重新启动之前,如何告诉 GRUB 我要重新启动到 Windows?

jad*_*k94 48 dual-boot grub2 reboot

我设置了双引导 Linux/windows 系统,并且经常从一个切换到另一个。我在想是否可以在其中一个菜单中添加一个菜单项以直接重新启动到 Windows,而无需在 GRUB 提示符处停止。

我在论坛上看到这个问题,这正是我想要的,但它是在处理 lilo,这不是我的情况。

我想到了一个解决方案,可以修改 GRUB 菜单中的默认条目,然后重新启动,但是有一些缺点,我想知道是否有更干净的替代方案。

(另外,我对从 Windows 直接启动到 Linux 的解决方案感兴趣,但这可能更难,不属于这里。无论如何,只要我有一种方式,另一种方式可以设置为默认值。

UPDATE似乎有人问过类似的问题,如果这些是建议的答复,我还不如编辑/boot/grub/grubenv作为grub-rebootgrub-set-defaultgrub-editenv做。)

提前感谢您的任何提示。

更新

这是我的 GRUB 版本: (GRUB) 1.99-12ubuntu5-1linuxmint1

我试过运行grubonce,没有找到命令。在存储库中搜索它什么也没给我。我在 Linux Mint 上,所以可能是这样......

看到man grub-reboot,它似乎像我想要的那样grubonce做。它也随处可用(至少对我来说是这样,我认为它是 grub 包的一部分)。我看到了两个相关的命令:grub-editenvgrub-set-default

我发现在运行之后,运行sudo grub-set-default 4grub-editenv list你会得到类似的东西:

saved_entry=4
Run Code Online (Sandbox Code Playgroud)

当运行时grub-reboot 4,你会得到类似的东西:

prev_saved_entry=0
saved_entry=4
Run Code Online (Sandbox Code Playgroud)

这意味着两者都做同样的事情(一个是临时的,一个不是)。

令人惊讶的是,当我尝试:

sudo grub-reboot 4
sudo reboot now
Run Code Online (Sandbox Code Playgroud)

它不起作用,好像我什么也没做,它只是像往常一样向我显示菜单,并选择了第一个条目,说它将在 10 秒内启动此条目。

我又试了一次,我想我可能写错了条目(它是从零开始的,对吧?)。那个时候,它只是挂在菜单屏幕上,我不得不硬重置 PC 才能启动。

如果有人可以尝试这个,只是为了看看它是否只有我,我会很感激。(薄荷让我很难过,那将是改变的好时机:P)。

阅读中的代码/boot/grub/grub.cfg,似乎这是要走的路,但从我的观察来看,它只是忽略了这些设置......

Phi*_*oud 39

  1. 编辑 /etc/default/grub 并替换GRUB_DEFAULT=0GRUB_DEFAULT=saved
  2. sudo update-grub
  3. 您的命令将是:

    sudo grub-reboot "$(grep -i windows /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot
    
    Run Code Online (Sandbox Code Playgroud)

    一个漂亮的函数,~/.bashrc或者.bash_aliases看起来像:

    sudo grub-reboot "$(grep -i windows /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot
    
    Run Code Online (Sandbox Code Playgroud)

    编者注:

    • 我已经用构造替换了已弃用的反引号( ``) $(...)

    • 总的来说,我重新编写了它以符合当前的POSIX (wiki)标准,并在此期间进行了一些其他小的更改。

    • 为了完整起见,为了比较,我保留了下面的函数。


如果您的 grub.conf 包含适用于 Windows 的多行,以下函数将只关心从menuentry第一行开始并选择第一行的行,参考 Windows:

function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-reboot "$WINDOWS_TITLE"
    sudo reboot
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为正确答案。 (2认同)

jw0*_*013 30

为了使grub-reboot命令起作用,必须进行一些必需的配置更改:

  • grub 的默认条目必须设置为saved. 一个可能的位置是GRUB_DEFAULT=/etc/default/grub
  • 使用grub-set-default设置默认进入到一个你正常使用。
  • 更新您的 grub 配置(例如update-grub)。

这应该照顾初始设置。将来,只需grub-reboot <entry><entry>.