แสดงเมนูด้วงและตัวเลือกโดยไม่ต้องรีบูตเครื่องหรือไม่


12

ฉันต้องการแสดงgrubเมนูจากบรรทัดคำสั่ง นอกจากนี้เพื่อเลือกตัวเลือกเมนูการบู๊ตด้วงและกดEnterเพื่อดูไดรเวอร์ของเคอร์เนลที่โหลดไว้ล่วงหน้าและพารามิเตอร์การบู๊ตถูกส่งผ่านเมื่อโหลดเคอร์เนล

เหตุผลในการทำเช่นนี้จากบรรทัดคำสั่ง:

  • การรีบูตเครื่องเพื่อดูgrubเมนูต้องใช้เวลา
  • มันลำบากที่จะถ่ายรูปgrubเมนูและโพสต์ภาพบนเว็บไซต์ เป็นการง่ายกว่าที่จะจับภาพหน้าจอเมื่อ Ubuntu พร้อมใช้งาน
  • ในการeditเลือกเมนูด้วงeและถ่ายภาพมักจะทำได้ยากเพราะหน้าจออ่านยาก ด้วยฟังก์ชั่นนี้คุณสามารถคัดลอกและวางแทน
  • มันอาจจะง่ายขึ้นโดยใช้ฟังก์ชั่นนี้จะเปิดเผยรุ่นเคอร์เนลมากกว่าหรือapt list --installed | grep linux-imagels /boot/vml*
  • หากต้องการดูหมายเลขเมนูด้วงอย่างรวดเร็วมีค่าgrub-rebootและgrub-set-defaultคำสั่ง

ฉันจะทาสีเมนูด้วงจากบรรทัดคำสั่งดูหมายเลขรายการเมนูด้วงภายในและแสดงพารามิเตอร์การบูตสำหรับตัวเลือกที่กำหนดได้อย่างไร

คำตอบ:


12

อัปเดตเมื่อ 7 พฤษภาคม 2018

การพัฒนาสคริปต์: สคริปต์ทุบตีเพื่อโคลน Ubuntu ไปยังพาร์ติชันใหม่สำหรับการทดสอบการอัพเกรด 18.04 LTSฉันค้นพบว่าคุณได้รับตัวเลือกเมนูที่ยาวเหยียดซึ่งทำให้เมนูเป็นอันตราย:

4>8  Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) (on /dev/nvme0n1p8)

สิ่งนี้ได้รับการแก้ไขในวันนี้โดยตัดทอนบรรทัดที่ยาวเกิน 68 อักขระ

อัปเดตเมื่อ 5 เมษายน 2018

การอัปเดตนี้แนะนำgrub-menu.shรุ่นที่เหนือกว่ามากสำหรับคำตอบก่อนหน้า (ยังมีอยู่ด้านล่าง) คุณสมบัติของเมนูด้วงใหม่:

  • แสดงหมายเลขรายการเมนูด้วง 2 เช่น0, 1, 1>0, 1>1... 2,3
  • เวอร์ชันสั้นเริ่มต้นที่ไม่มีตัวเลือก(upstart)และ(recover mode)เมนูย่อยสามารถตั้งค่าได้
  • พารามิเตอร์ 1 สามารถส่งผ่านเป็นshortหรือlongเพื่อแทนที่ค่าเริ่มต้น
  • ส่วนหัวคอลัมน์จัดรูปแบบแบบไดนามิกตามshortหรือlongการตั้งค่า

ภาพหน้าจอสี (รุ่นสั้น)

grub-menu.sh

ภาพหน้าจอข้อความ (รุ่นยาว)

Grub Version: 2.02~beta2-36ubuntu3.15


        ┌─────────┤ Use arrow, page, home & end keys. Tab toggle option ├──────────┐
        │ Menu No. --------------- Menu Name ---------------                       │ 
        │                                                                          │ 
        │     0    Ubuntu                                                     ↑    │ 
        │     1    Advanced options for Ubuntu                                ▮    │ 
        │     1>0  Ubuntu, with Linux 4.14.31-041431-generic                  ▒    │ 
        │     1>1  Ubuntu, with Linux 4.14.31-041431-generic (upstart)        ▒    │ 
        │     1>2  Ubuntu, with Linux 4.14.31-041431-generic (recovery mode)  ▒    │ 
        │     1>3  Ubuntu, with Linux 4.14.30-041430-generic                  ▒    │ 
        │     1>4  Ubuntu, with Linux 4.14.30-041430-generic (upstart)        ▒    │ 
        │     1>5  Ubuntu, with Linux 4.14.30-041430-generic (recovery mode)  ▒    │ 
        │     1>6  Ubuntu, with Linux 4.14.27-041427-generic                  ▒    │ 
        │     1>7  Ubuntu, with Linux 4.14.27-041427-generic (upstart)        ▒    │ 
        │     1>8  Ubuntu, with Linux 4.14.27-041427-generic (recovery mode)  ▒    │ 
        │     1>9  Ubuntu, with Linux 4.14.24-041424-generic                  ▒    │ 
        │     1>10 Ubuntu, with Linux 4.14.24-041424-generic (upstart)        ▒    │ 
        │     1>11 Ubuntu, with Linux 4.14.24-041424-generic (recovery mode)  ▒    │ 
        │     1>12 Ubuntu, with Linux 4.14.23-041423-generic                  ▒    │ 
        │     1>13 Ubuntu, with Linux 4.14.23-041423-generic (upstart)        ↓    │ 
        │                                                                          │ 
        │                                                                          │ 
        │                   <Display Grub Boot>        <Exit>                      │ 
        │                                                                          │ 
        └──────────────────────────────────────────────────────────────────────────┘ 

grub-menu.sh สคริปต์ทุบตี

รุ่นก่อนหน้าgrub-display.shและgrub-display-lite.shต้องการตัวเลือกการปรับแต่งมากมายในรหัส grub-menu.shมีเพียงหนึ่งตัวเลือกในการปรับแต่ง:

# Default for hide duplicate and triplicate options with (upstart) and (recovery mode)?
HideUpstartRecovery=false

ตั้งค่าเป็นหรือtruefalse

รูปแบบเริ่มต้นสามารถเขียนทับได้เมื่อเรียกใช้สคริปต์โดยใช้:

grub-menu.sh short

หรือ:

grub-menu.sh long

รหัส:

#!/bin/bash

# NAME: grub-menu.sh
# PATH: $HOME/bin
# DESC: Written for AU Q&A: /ubuntu//q/1019213/307523
# DATE: Apr 5, 2018. Modified: May 7, 2018.

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi

AllMenusArr=()      # All menu options.
# Default for hide duplicate and triplicate options with (upstart) and (recovery mode)?
HideUpstartRecovery=false
if [[ $1 == short ]] ; then
    HideUpstartRecovery=true    # override default with first passed parameter "short"
elif [[ $1 == long ]] ; then
    HideUpstartRecovery=false   # override default with first passed parameter "long"
fi
SkippedMenuEntry=false  # Don't change this value, automatically maintained
InSubMenu=false     # Within a line beginning with `submenu`?
InMenuEntry=false   # Within a line beginning with `menuentry` and ending in `{`?
NextMenuEntryNo=0   # Next grub internal menu entry number to assign
# Major / Minor internal grub submenu numbers, ie `1>0`, `1>1`, `1>2`, etc.
ThisSubMenuMajorNo=0
NextSubMenuMinorNo=0
CurrTag=""          # Current grub internal menu number, zero based
CurrText=""         # Current grub menu option text, ie "Ubuntu", "Windows...", etc.
SubMenuList=""      # Only supports 10 submenus! Numbered 0 to 9. Future use.

while read -r line; do
    # Example: "           }"
    BlackLine="${line//[[:blank:]]/}" # Remove all whitespace
    if [[ $BlackLine == "}" ]] ; then
        # Add menu option in buffer
        if [[ $SkippedMenuEntry == true ]] ; then
            NextSubMenuMinorNo=$(( $NextSubMenuMinorNo + 1 ))
            SkippedMenuEntry=false
            continue
        fi
        if [[ $InMenuEntry == true ]] ; then
            InMenuEntry=false
            if [[ $InSubMenu == true ]] ; then
                NextSubMenuMinorNo=$(( $NextSubMenuMinorNo + 1 ))
            else
                NextMenuEntryNo=$(( $NextMenuEntryNo + 1 ))
            fi
        elif [[ $InSubMenu == true ]] ; then
            InSubMenu=false
            NextMenuEntryNo=$(( $NextMenuEntryNo + 1 ))
        else
            continue # Future error message?
        fi
        # Set maximum CurrText size to 68 characters.
        CurrText="${CurrText:0:67}"
        AllMenusArr+=($CurrTag "$CurrText")
    fi

    # Example: "menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu" ...
    #          "submenu 'Advanced options for Ubuntu' $menuentry_id_option" ...
    if [[ $line == submenu* ]] ; then
        # line starts with `submenu`
        InSubMenu=true
        ThisSubMenuMajorNo=$NextMenuEntryNo
        NextSubMenuMinorNo=0
        SubMenuList=$SubMenuList$ThisSubMenuMajorNo
        CurrTag=$NextMenuEntryNo
        CurrText="${line#*\'}"
        CurrText="${CurrText%%\'*}"
        AllMenusArr+=($CurrTag "$CurrText") # ie "1 Advanced options for Ubuntu"

    elif [[ $line == menuentry* ]] && [[ $line == *"{"* ]] ; then
        # line starts with `menuentry` and ends with `{`
        if [[ $HideUpstartRecovery == true ]] ; then
            if [[ $line == *"(upstart)"* ]] || [[ $line == *"(recovery mode)"* ]] ; then
                SkippedMenuEntry=true
                continue
            fi
        fi
        InMenuEntry=true
        if [[ $InSubMenu == true ]] ; then
            : # In a submenu, increment minor instead of major which is "sticky" now.
            CurrTag=$ThisSubMenuMajorNo">"$NextSubMenuMinorNo
        else
            CurrTag=$NextMenuEntryNo
        fi
        CurrText="${line#*\'}"
        CurrText="${CurrText%%\'*}"

    else
        continue    # Other stuff - Ignore it.
    fi

done < /boot/grub/grub.cfg

LongVersion=$(grub-install --version)
ShortVersion=$(echo "${LongVersion:20}")
DefaultItem=0

if [[ $HideUpstartRecovery == true ]] ; then
    MenuText="Menu No.     ----------- Menu Name -----------"
else
    MenuText="Menu No. --------------- Menu Name ---------------"
fi

while true ; do

    Choice=$(whiptail \
        --title "Use arrow, page, home & end keys. Tab toggle option" \
        --backtitle "Grub Version: $ShortVersion" \
        --ok-button "Display Grub Boot" \
        --cancel-button "Exit" \
        --default-item "$DefaultItem" \
        --menu "$MenuText" 24 76 16 \
        "${AllMenusArr[@]}" \
        2>&1 >/dev/tty)

    clear
    if [[ $Choice == "" ]]; then break ; fi
    DefaultItem=$Choice

    for (( i=0; i < ${#AllMenusArr[@]}; i=i+2 )) ; do
        if [[ "${AllMenusArr[i]}" == $Choice ]] ; then
            i=$i+1
            MenuEntry="menuentry '"${AllMenusArr[i]}"'"
            break
        fi
    done

    TheGameIsAfoot=false
    while read -r line ; do
        if [[ $line = *"$MenuEntry"* ]]; then TheGameIsAfoot=true ; fi
        if [[ $TheGameIsAfoot == true ]]; then
            echo $line
            if [[ $line = *"}"* ]]; then break ; fi
        fi
    done < /boot/grub/grub.cfg

    read -p "Press <Enter> to continue"

done

exit 0

รุ่นก่อนหน้า (ไม่แนะนำ)

ด้านล่างคือคำตอบดั้งเดิมที่หมายเลขรายการเมนูตามรูปแบบด้วง 1

grub-display.sh แสดงตัวเลือกเมนูและพารามิเตอร์ด้วง

คุณสามารถใช้สคริปต์ทุบตีเพื่อแสดงgrubเมนูและพารามิเตอร์การบู๊ตสำหรับตัวเลือกใด ๆ พารามิเตอร์การบู๊ตเป็นมากกว่าcat /proc/cmdlineค่า นอกจากนี้ยังรวมถึงไดรเวอร์ที่โหลดก่อนที่จะบูตด้วย Linux

grub-display.sh สคริปต์ทุบตี

นี่คือรายการโปรแกรมเต็มรูปแบบที่คุณสามารถคัดลอกและวาง:

#!/bin/bash

# NAME: grub-display.sh
# PATH: $HOME/bin
# DESC: Written for AU Q&A: /ubuntu//q/1019213/307523
# DATE: Mar 24, 2018. Modified: Mar 26, 2018.

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi

# Must have the dialog package. On Servers, not installed by default
command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed.  Aborting."; exit 99; }

# Version without upstart and recovery options displayed
#awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \
#        | grep -v upstart | grep -v recovery > ~/.grub-display-menu

# Version with upstart and recovery options displayed
awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \
        > ~/.grub-display-menu

MenuArr=()

while read -r line; do 
    MenuNmbr=${line%% *}
    MenuName=${line#* }
    MenuArr+=($MenuNmbr "$MenuName")
done < ~/.grub-display-menu
rm ~/.grub-display-menu

LongVersion=$(grub-install --version)
ShortVersion=$(echo "${LongVersion:20}")
DefaultItem=0

while true ; do

    Choice=$(dialog \
        --title "Use arrow, page, home & end keys. Tab toggle option" \
        --backtitle "Grub Version: $ShortVersion" \
        --ok-label "Display Grub Boot" \
        --cancel-label "Exit" \
        --default-item "$DefaultItem" \
        --menu "Menu Number       ----------- Menu Name ----------" 24 76 16 \
        "${MenuArr[@]}" \
        >/dev/tty)

    clear
    if [[ $Choice == "" ]]; then break ; fi
    DefaultItem=$Choice

    for (( i=0; i < ${#MenuArr[@]}; i=i+2 )) ; do
        if [[ "${MenuArr[i]}" == $Choice ]] ; then
            i=$i+1
            MenuEntry="menuentry '"${MenuArr[i]}"'"
            break
        fi
    done

    TheGameIsAfoot=false
    while read -r line ; do
        if [[ $line = *"$MenuEntry"* ]]; then TheGameIsAfoot=true ; fi
        if [[ $TheGameIsAfoot == true ]]; then
            echo $line
            if [[ $line = *"}"* ]]; then break ; fi
        fi
    done < /boot/grub/grub.cfg

    read -p "Press <Enter> to continue"

done

exit 0

หมายเหตุสำหรับผู้ใช้ Ubuntu Server

สคริปต์ทุบตีนี้ออกแบบมาสำหรับ Ubuntu Desktop สำหรับ Ubuntu Server และ Linux Distros อื่น ๆ ที่ไม่มีdialogแพ็คเกจติดตั้งโดยค่าเริ่มต้นสคริปต์อื่นที่เรียกว่าgrub-display-lite.shจะรวมอยู่ด้านล่าง รุ่นที่ใช้แทนwhiptaildialog

ลดขนาดเมนูลง 66%

ในการย่อรายการตัวเลือกเมนูด้วงที่แสดงคุณสามารถลบ(upstart)และ(recovery)ตัวเลือก ในการทำเช่นนี้ไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัดเหล่านี้:

# Version without upstart and recovery options displayed
awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \
        | grep -v upstart | grep -v recovery > ~/.grub-display-menu

จากนั้นใช้ความคิดเห็นกับบรรทัดเหล่านี้:

# Version with upstart and recovery options displayed
#awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \
#        > ~/.grub-display-menu

ภาพหน้าจอ

นี่คือสิ่งที่ดูเหมือนว่าเมื่อเรียกจากบรรทัดคำสั่ง น่าเสียดายที่ฉันไม่สามารถคัดลอกและวางเมนูและต้องใช้Print Screen:

ด้วง display.sh.png

ปิดการสนับสนุนเมาส์เพื่อคัดลอกและวาง

 Grub Version: 2.02~beta2-36ubuntu3.15
 ──────────────────────────────────────────────────────────────────────────────────────────
       ┌──────────Use arrow, page, home & end keys. Tab toggle option─────────────┐
        Menu Number  ----------- Menu Name ----------                              
        ┌──────────────────────────────────────────────────────────────────────┐   
            0   Ubuntu                                                           
            1   Ubuntu, with Linux 4.14.30-041430-generic                        
            2   Ubuntu, with Linux 4.14.30-041430-generic (upstart)              
            3   Ubuntu, with Linux 4.14.30-041430-generic (recovery mode)        
            4   Ubuntu, with Linux 4.14.27-041427-generic                        
            5   Ubuntu, with Linux 4.14.27-041427-generic (upstart)              
            6   Ubuntu, with Linux 4.14.27-041427-generic (recovery mode)        
            7   Ubuntu, with Linux 4.14.24-041424-generic                        
            8   Ubuntu, with Linux 4.14.24-041424-generic (upstart)              
            9   Ubuntu, with Linux 4.14.24-041424-generic (recovery mode)        
            10  Ubuntu, with Linux 4.14.23-041423-generic                        
            11  Ubuntu, with Linux 4.14.23-041423-generic (upstart)              
            12  Ubuntu, with Linux 4.14.23-041423-generic (recovery mode)        
            13  Ubuntu, with Linux 4.14.21-041421-generic                        
            14  Ubuntu, with Linux 4.14.21-041421-generic (upstart)              
            15  Ubuntu, with Linux 4.14.21-041421-generic (recovery mode)        
        └────↓(+)──────────────────────────────────────────────────────16%─────┘   
                                                                                   
       ├──────────────────────────────────────────────────────────────────────────┤  
                    <Display Grub Boot>       <      Exit       >                  
       └──────────────────────────────────────────────────────────────────────────┘  

เมื่อเปิดใช้งานการรองรับเมาส์เริ่มต้นคุณจะไม่สามารถคัดลอกหน้าจอไปยังคลิปบอร์ดได้ แต่ต้องใช้Print Screenสำหรับสแนปชอตของหน้าจอกราฟิก ในการรองรับการคัดลอกและวางคุณต้องปิดการใช้งานเมาส์โดยการค้นหาบรรทัดเหล่านี้:

    --default-item "$DefaultItem" \
    --no-mouse \
    --menu "Menu Number       ----------- Menu Name ----------" 24 76 16 \

อาร์กิวเมนต์ที่ได้รับการแทรกด้านล่าง--no-mouse --default-itemซึ่งหมายความว่าคุณหลวมสนับสนุนเมาส์ แต่ได้รับความละเอียดที่ดีขึ้นและความสามารถในการคัดลอกไปยังคลิปบอร์ดโดยไฮไลต์ข้อความและกด+CtrlC

แสดงพารามิเตอร์การบูตด้วง

ใช้ปุ่มนำทางเพื่อไฮไลต์ตัวเลือกแล้วกดEnterเพื่อดูพารามิเตอร์การบูต:

menuentry 'Ubuntu, with Linux 4.14.27-041427-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.27-041427-generic-advanced-f3f8e7bc-b337-4194-88b8-3a513f6be55b' {
recordfail
savedefault
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root f3f8e7bc-b337-4194-88b8-3a513f6be55b
else
search --no-floppy --fs-uuid --set=root f3f8e7bc-b337-4194-88b8-3a513f6be55b
fi
echo 'Loading Linux 4.14.27-041427-generic ...'
linux /boot/vmlinuz-4.14.27-041427-generic root=UUID=f3f8e7bc-b337-4194-88b8-3a513f6be55b ro quiet splash loglevel=0 vga=current udev.log-priority=3 fastboot kaslr acpiphp.disable=1 crashkernel=384M-2G:128M,2G-:256M $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.14.27-041427-generic
}
Press <Enter> to continue

รายการเมนูด้วง # 94

menuentry 'Windows Boot Manager (on /dev/nvme0n1p2)' --class windows --class os $menuentry_id_option 'osprober-efi-D656-F2A8' {
savedefault
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root D656-F2A8
else
search --no-floppy --fs-uuid --set=root D656-F2A8
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
Press <Enter> to continue

รายการเมนูด้วง # 96

menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
fwsetup
}
Press <Enter> to continue

grub-display-lite.sh สำหรับเซิร์ฟเวอร์ Ubuntu

เซิร์ฟเวอร์ Ubuntu และ Lubuntu ไม่มีdialogแพ็คเกจติดตั้งตามค่าเริ่มต้นเช่น Ubuntu Desktop มีการเขียนเวอร์ชันที่แตกต่างกันสำหรับผู้ใช้เหล่านี้โดยยึดตามwhiptailแพคเกจซึ่งรวมอยู่ในค่าเริ่มต้นในการแจกจ่าย Linux

ข้อเสียของwhiptailฟังก์ชั่นน้อยลง แต่ไม่ได้ใช้ในกรณีนี้ ข้อเสียอีกประการหนึ่งดูเหมือนจะมีสีน้อยลง แต่ก็ทำให้บางคนอ่านง่ายขึ้น มีข้อดีwhiptailมากกว่าdialogเช่นคัดลอกไปยังคลิปบอร์ดสนับสนุนล้อเลื่อนของเมาส์และการประมวลผลที่เร็วขึ้น

grub-display-lite.sh สคริปต์ทุบตี

#!/bin/bash

# NAME: grub-display-lite.sh
# PATH: $HOME/bin
# DESC: Written for AU Q&A: /ubuntu//q/1019213/307523
# DATE: Mar 26, 2018.
# NOTE: "lite" version written for Ubuntu Server and Lubuntu which do
#       not have `dialog` installed by default. `whiptail` is used
#       instead. Nice consequences are better resolution, mouse scroll
#       wheel and copy to clipboard support.

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi

# Version without upstart and recovery options displayed
awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \
        | grep -v upstart | grep -v recovery > ~/.grub-display-menu

# Version with upstart and recovery options displayed
#awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \
#        > ~/.grub-display-menu

MenuArr=()

while read -r line; do 
    MenuNmbr=${line%% *}
    MenuName=${line#* }
    MenuArr+=($MenuNmbr "$MenuName")
done < ~/.grub-display-menu
rm ~/.grub-display-menu

LongVersion=$(grub-install --version)
ShortVersion=$(echo "${LongVersion:20}")
DefaultItem=0

while true ; do

    Choice=$(whiptail \
        --title "Use arrow, page, home & end keys. Tab toggle option" \
        --backtitle "Grub Version: $ShortVersion" \
        --ok-button "Display Grub Boot" \
        --cancel-button "Exit" \
        --default-item "$DefaultItem" \
        --menu "Menu Number       ----------- Menu Name ----------" 24 76 16 \
        "${MenuArr[@]}" \
       >/dev/tty)

    clear
    if [[ $Choice == "" ]]; then break ; fi
    DefaultItem=$Choice

    for (( i=0; i < ${#MenuArr[@]}; i=i+2 )) ; do
        if [[ "${MenuArr[i]}" == $Choice ]] ; then
            i=$i+1
            MenuEntry="menuentry '"${MenuArr[i]}"'"
            break
        fi
    done

    TheGameIsAfoot=false
    while read -r line ; do
        if [[ $line = *"$MenuEntry"* ]]; then TheGameIsAfoot=true ; fi
        if [[ $TheGameIsAfoot == true ]]; then
            echo $line
            if [[ $line = *"}"* ]]; then break ; fi
        fi
    done < /boot/grub/grub.cfg

    read -p "Press <Enter> to continue"

done

exit 0

grub-display-lite.shสคริปต์ทุบตีเป็นพื้นเดียวกันเป็นgrub-display.shยกเว้นมีข้อผิดพลาดถ้าdialogไม่ได้ติดตั้ง whiptailอาร์กิวเมนต์บางตัวก็มีชื่อต่างกัน

grub-display-lite.sh ภาพหน้าจอ

ดูเหมือนว่าหน้าจอสีจะอ่านง่ายกว่าgrub-displayที่ใช้dialogแพ็คเกจ:

grub-display-lite.sh

นี่คือรูปภาพที่เป็นข้อความซึ่งไม่จำเป็นต้องแก้ไขเพื่อคัดลอกไปยังคลิปบอร์ด:

Grub Version: 2.02~beta2-36ubuntu3.15


        ┌─────────┤ Use arrow, page, home & end keys. Tab toggle option ├──────────┐
         Menu Number       ----------- Menu Name ----------                        
                                                                                   
                      55 Ubuntu, with Linux 4.13.9-041309-generic                 
                      58 Ubuntu, with Linux 4.10.0-42-generic                     
                      61 Ubuntu, with Linux 4.10.0-40-generic                     
                      64 Ubuntu, with Linux 4.10.0-38-generic                     
                      67 Ubuntu, with Linux 4.10.0-37-generic                     
                      70 Ubuntu, with Linux 4.10.0-28-generic                     
                      73 Ubuntu, with Linux 4.9.77-040977-generic                 
                      76 Ubuntu, with Linux 4.9.76-040976-generic                 
                      79 Ubuntu, with Linux 4.4.0-104-generic                     
                      82 Ubuntu, with Linux 4.4.0-103-generic                     
                      85 Ubuntu, with Linux 4.4.0-101-generic                     
                      88 Ubuntu, with Linux 4.4.0-98-generic                      
                      91 Ubuntu, with Linux 3.16.53-031653-generic                
                      94 Windows Boot Manager (on /dev/nvme0n1p2)                 
                      95 Windows Boot Manager (on /dev/sda1)                      
                      96 System setup                                             
                                                                                   
                                                                                   
                           <Display Grub Boot>        <Exit>                       
                                                                                   
        └──────────────────────────────────────────────────────────────────────────┘ 

ดังที่ได้กล่าวมาแล้วคุณสามารถลดขนาดของเมนูด้วงที่แสดงที่นี่ได้ถึง 66% เมื่อทำการลบ(upstart)และ(recovery)ตัวเลือกเมนู นี่เป็นกรณีที่นี่ แต่เป็นผลให้เส้นรายละเอียดแคบลงและหัวเรื่องไม่เรียงกันอย่างสมบูรณ์ คุณสามารถปรับแต่งส่วนหัวคอลัมน์โดยเปลี่ยนบรรทัดนี้:

    --menu "Menu Number       ----------- Menu Name ----------" 24 76 16 \

เพื่อสิ่งนี้:

    --menu "      Menu Number ----------- Menu Name ----------" 24 76 16 \

cat /proc/cmdlineหากต้องการดูข้อมูลการใช้งานเพียงแค่ปัจจุบัน grep GRUB_CMDLINE_LINUX /etc/default/grubหากต้องการดูตัวเลือกด้วงจะใช้ในครั้งต่อไปที่คุณปรับปรุงการใช้งานเมนูด้วง การตั้งค่าชุดที่สองเหล่านั้นจะถูกใช้โดย apt หรือเมื่อใดก็ตามที่update-grubทำงาน หากต้องการดูตัวเลือกทั้งหมดเพียงless /boot/grub/grub.cfgหรือคล้ายกัน
Panther

@Panther ฉันเพิ่มรายการเมนูด้วง # 94 และ # 96 (จากระบบของฉัน) เพื่อแสดงประโยชน์มากขึ้น สิ่งอื่นที่ควรพิจารณาคือการใช้เมนูง่ายกว่าการจดจำcatและgrepสำหรับพวกเราส่วนใหญ่
WinEunuuchs2Unix

+1 ฉันยอมรับว่าเมนูของโหมดข้อความที่ใช้dialogจะมีประโยชน์
sudodus

เชิงอรรถหนึ่งข้ออันน่าประทับใจอันนี้คืออูบุนตูบางรสชาติไม่รวมกล่องโต้ตอบ lubuntu 16.04 โดยค่าเริ่มต้น
ianorlin

@ianorlin รุ่นที่ดีกว่านี้เพิ่งโพสต์แล้ว
WinEunuuchs2Unix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.