AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 733722
Accepted
user330163
user330163
Asked: 2023-01-31 07:53:14 +0800 CST2023-01-31 07:53:14 +0800 CST 2023-01-31 07:53:14 +0800 CST

Voltar para root_menu no script não responde como deveria

  • 772

Menu e seus submenus em script bash de arquivo único com um menu de volta ao root para cada um.

Meu problema é que a show_root_menuchamada às vezes apenas pula para o menu superior em vez da raiz.

Bash-installer-menu .

Na maioria das vezes, dá errado com o submenu nvidia, para voltar ao menu raiz.

Em vez disso, ele vai para as "Opções do pacote" show_pckg_menu, quando "mostrar menu raiz" é selecionado no submenu "Instalar driver gráfico proprietário":

show_root_menu


show_nvidia_menu


show_pckg_menu

Minhas outras questões relacionadas foram resolvidas até agora:

  • Qual é a diferença entre "comando sh" e executar como executável?
  • Criando e depurando um menu de script bash

$ shellcheck myscript No issues detected!

O roteiro real é:

#!/bin/bash
show_root_menu(){
width=72
height=50
menu_height=8
backtitle="Installer-menu"
title="Setup opions"
menu="Choose one of the following options:"

options=(1 'Add Mint PPA and update' 
         2 'Install Cinnamon '
         3 'update and upgrade '
         4 'Additional software installation '
         5 'Upgrade Kernel '
         6 'Resolve Ubuntu Cinnamon issues '
         7 'Install graphic proprietary driver'
         x reboot
         q quit )
    
result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_pckg_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Package options'
menu='Choose one of the following options:'

options=(1 'Install package list'
         2 'Export package list'
         3 'update and upgrade'
         4 'Show root menu'
         x reboot
         q quit )

result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_solver_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Resolver menu'
menu='Choose one of the following options:'

options=(1 'Network applet problem'
         2 'Sound problem'
         3 'update and upgrade'
         4 'Show root menu'
         x reboot
         q quit )


result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_nvidia_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='NVidia driver selection'
menu='Choose one of the following options:'

options=(1 'Install nvidia 515'
         2 'Install nvidia 525'
         3 'Update and upgrade'
         4 'Show root menu'
         x reboot
         q quit )

result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_root_menu
case "$result" in
    1)  echo 'Mint backport repos installed';
        apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
        sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
        sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
        apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
        apt update;
        show_root_menu;;
    2)  echo 'Installation of Cinnamon';
        apt install slick-greeter muffin cinnamon;
        show_root_menu;;
    3)  echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_root_menu;;
    4)  show_pckg_menu;;
    5)  sh ubuntu-mainline-kernel.sh;
        show_root_menu;;
    6)  show_solver_menu;;
    7)  show_nvidia_menu;;
    x)  echo Reboot;
        reboot;;
    q)  clear; 
        exit ;;
esac

show_pckg_menu
case "$result" in
     1) echo 'Package Install';
        sh installpkgs.sh;;
     2) echo 'Manualy installed packages exported';
        sh pkgsexport.sh;;
     3) echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_pckg_menu;;
     4) show_root_menu;;
     x) echo 'Reboot';
        reboot;;
     q) clear; 
        exit ;;
esac

show_solver_menu
case "$result" in
     1) echo 'Applying changes to network settings';
        clear;
        option_picked "Option 1 Picked";
        touch /etc/network/interfaces;
        sh -c 'echo "auto lo" >> /etc/network/interfaces';
        sh -c 'echo "iface lo inet loopback" >> /etc/network/interfaces';
        sh -c 'echo "  renderer: NetworkManager" >> /etc/netplan/*.yaml';
        netplan apply;
        show_solver_menu;;
     2) echo 'Applying changes to sound settings';
        ln -s /usr/share/pipewire /etc/pipewire;
        touch /usr/share/pipewire/media-session.d/with-pulseaudio;
        systemctl --user restart pipewire-session-manager;
        systemctl --user start pulseaudio;
        show_solver_menu;;
     3) echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_solver_menu;;
     4) show_root_menu;;
     x) echo 'Reboot';
        reboot;;
     q) clear; 
        exit ;;
esac

show_nvidia_menu
case "$result" in
     1) echo 'NVidia driver 515 installation';
        apt install nvidia-driver-515 -y;
        show_nvidia_menu;;
     2) echo 'NVidia driver 525 installation';
        apt install nvidia-driver-525 -y;
        show_nvidia_menu;;
     3) echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_nvidia_menu;;
     4) show_root_menu;;
     x) echo 'Reboot';
        reboot;;
     q) clear; exit ;;
esac
bash
  • 1 1 respostas
  • 23 Views

1 respostas

  • Voted
  1. Best Answer
    Freddy
    2023-01-31T08:57:20+08:002023-01-31T08:57:20+08:00

    No final do seu instalador, há quatro chamadas de menu show_root_menu, show_pckg_menu, show_solver_menue show_nvidia_menu, cada uma seguindo a declaração de caso correspondente.

    E é isso que acontece: Quando o menu raiz é mostrado e o usuário pressiona cancel, o menu do pacote é mostrado. Pressione cancel-> menu do solucionador, cancel-> menu nvidia, cancel-> sair (fim do script).

    Se você iniciar o script novamente e pressionar 7(menu nvidia) e, em seguida, pressionar 4para voltar ao menu raiz, a instrução case estará ausente e show_pckg_menuserá chamada em seu lugar.

    A correção: chame apenas show_root_menuno final do script e mova as instruções case para suas funções correspondentes após result=$(dialog...).

    #!/bin/bash
    show_root_menu(){
    width=72
    height=50
    menu_height=8
    backtitle="Installer-menu"
    title="Setup opions"
    menu="Choose one of the following options:"
    
    options=(1 'Add Mint PPA and update' 
             2 'Install Cinnamon '
             3 'update and upgrade '
             4 'Additional software installation '
             5 'Upgrade Kernel '
             6 'Resolve Ubuntu Cinnamon issues '
             7 'Install graphic proprietary driver'
             x reboot
             q quit )
        
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
        1)  echo 'Mint backport repos installed';
            apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
            sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
            sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
            apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
            apt update;
            show_root_menu;;
        2)  echo 'Installation of Cinnamon';
            apt install slick-greeter muffin cinnamon;
            show_root_menu;;
        3)  echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_root_menu;;
        4)  show_pckg_menu;;
        5)  sh ubuntu-mainline-kernel.sh;
            show_root_menu;;
        6)  show_solver_menu;;
        7)  show_nvidia_menu;;
        x)  echo Reboot;
            reboot;;
        q)  clear; 
            exit ;;
    esac
    }
    show_pckg_menu(){
    width=72
    height=22
    menu_height=8
    backtitle='Installer-menu'
    title='Package options'
    menu='Choose one of the following options:'
    
    options=(1 'Install package list'
             2 'Export package list'
             3 'update and upgrade'
             4 'Show root menu'
             x reboot
             q quit )
    
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
         1) echo 'Package Install';
            sh installpkgs.sh;;
         2) echo 'Manualy installed packages exported';
            sh pkgsexport.sh;;
         3) echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_pckg_menu;;
         4) show_root_menu;;
         x) echo 'Reboot';
            reboot;;
         q) clear; 
            exit ;;
    esac
    }
    show_solver_menu(){
    width=72
    height=22
    menu_height=8
    backtitle='Installer-menu'
    title='Resolver menu'
    menu='Choose one of the following options:'
    
    options=(1 'Network applet problem'
             2 'Sound problem'
             3 'update and upgrade'
             4 'Show root menu'
             x reboot
             q quit )
    
    
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
         1) echo 'Applying changes to network settings';
            clear;
            option_picked "Option 1 Picked";
            touch /etc/network/interfaces;
            sh -c 'echo "auto lo" >> /etc/network/interfaces';
            sh -c 'echo "iface lo inet loopback" >> /etc/network/interfaces';
            sh -c 'echo "  renderer: NetworkManager" >> /etc/netplan/*.yaml';
            netplan apply;
            show_solver_menu;;
         2) echo 'Applying changes to sound settings';
            ln -s /usr/share/pipewire /etc/pipewire;
            touch /usr/share/pipewire/media-session.d/with-pulseaudio;
            systemctl --user restart pipewire-session-manager;
            systemctl --user start pulseaudio;
            show_solver_menu;;
         3) echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_solver_menu;;
         4) show_root_menu;;
         x) echo 'Reboot';
            reboot;;
         q) clear; 
            exit ;;
    esac
    }
    show_nvidia_menu(){
    width=72
    height=22
    menu_height=8
    backtitle='Installer-menu'
    title='NVidia driver selection'
    menu='Choose one of the following options:'
    
    options=(1 'Install nvidia 515'
             2 'Install nvidia 525'
             3 'Update and upgrade'
             4 'Show root menu'
             x reboot
             q quit )
    
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
         1) echo 'NVidia driver 515 installation';
            apt install nvidia-driver-515 -y;
            show_nvidia_menu;;
         2) echo 'NVidia driver 525 installation';
            apt install nvidia-driver-525 -y;
            show_nvidia_menu;;
         3) echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_nvidia_menu;;
         4) show_root_menu;;
         x) echo 'Reboot';
            reboot;;
         q) clear; exit ;;
    esac
    }
    
    show_root_menu
    
    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve