Como posso passar argumentos de linha de comando para um script através de Dash? (14.04)

8

Recentemente, fiz esta pergunta sobre adicionar um script de shell ao Dash:

Em 14.04 como executo um script bash que escrevi sem abrir um terminal?

Funcionou perfeitamente.

Pergunta de acompanhamento: Como posso passar argumentos de linha de comando pelo Dash? Exemplo: Neste caso, meu comando traço é chamado "Painel". O script exibe minha tela com 8 terminais. Aqui está um exemplo do uso:

panel             # Tile the screen with 8 terminal windows.
panel --left      # Tile the left side with 4 terminals
panel --right     # Tile the right side with 4 terminals

E assim por diante. Como posso passar argumentos como --left ou --right através do Dash? Idealmente, gostaria de ter este fluxo de trabalho:

  • Pressione a tecla SUPER
  • Digite panel --left (por exemplo)
  • O traço desaparece e o lado esquerdo é apainelado.

Neste momento, ele executa o script correto, mas ignora --left .

Dicas?

    
por Sir Robert 24.10.2014 / 19:47

2 respostas

16

O problema é que você não pode "executar" um arquivo .desktop do Dash com argumentos, então a configuração exatamente como você tem em mente é impossível, receio. No entanto, assumindo que o seu script faz argumentos, existem algumas opções alternativas elegantes, talvez até melhores:

  1. Salve seu script em ~/bin

    • remova a extensão
    • torne-o executável
    • execute-o pressionando Alt F2 , digite o comando

      <scriptname> <argument> 
      
  1. Crie uma lista rápida no iniciador do Unity:

    (supondo que você salvou o script em ~/bin , tornou executável e removeu a extensão como em 1.)

    [DesktopEntry]Name=name_of_your_script_like_you_see_it_in_DashExec=<scriptname><default_argument>Icon=/path/to/some/iconType=ApplicationActions=Panel;Panel-left;Panel-right;[DesktopActionPanel]Name=PanelExec=<scriptname><default_argument>OnlyShowIn=Unity;[DesktopActionPanel-left]Name=Panel-leftExec=<scriptname><argument_1>OnlyShowIn=Unity;[DesktopActionPanel-left]Name=Panel-rightExec=<scriptname><argument_2>OnlyShowIn=Unity;

    Salve-ocomopanel.desktopem~/.local/share/applicationsearraste-oparaoiniciador.

  • Crie três atalhos de teclado diferentes, por exemplo Alt + < , Alt + ^ , Alt + > para executar seu script + argumentos:

    "Configurações do sistema" > "Teclado" > "Atalhos" > "Atalhos personalizados"

    Clique em "+" para adicionar seus comandos: <scriptname> <argument>

    1. Não é o mais óbvio, mas explorando as opções, deve ser mencionado: você pode chamar uma lista de opções (zenity) do Dash:

      Digiteoprimeirocaracteredasuaopção,pressionereturneseuscriptseráexecutadocomoargumentoescolhido.

      Novamente, supondo que você salvou o script em ~ / bin, tornou-o executável e removeu a extensão de idioma como em 1.:

      • Copie o script abaixo em um arquivo vazio, salve-o como panel_options.sh , torne-o executável.

        #!/bin/bash
        
        test=$(zenity --list "1. Panel" "2. Panel -left" "3. Panel -right" --column="Panel options" --title="Panel")
        
        if [[ "$test" = "1. Panel"* ]]; then
            <scriptname> <default_argument>
        elif [[ "$test" = "2. Panel -left"* ]]; then
            <scriptname> <argument_1>
        elif [[ "$test" = "3. Panel -right"* ]]; then
            <scriptname> <argument_2>
        fi
        
      • Crie o arquivo .desktop a partir do código abaixo. Na linha Icon= , defina o caminho para o seu ícone, na linha Exec= o caminho para pane_options.sh , salve-o como panel.desktop in ~/.local/share/applicatios

        [Desktop Entry]
        Name=Panel
        Exec=/path/to/panel_options.sh
        Icon=/path/to/some/icon
        Type=Application
        StartupWMClass=Zenity
        
    por Jacob Vlijm 29.10.2014 / 10:16
    0

    A partir da sua pergunta original, parece que a coisa certa a fazer seria mover o script para ~/bin/ , que deve estar em seu $PATH por padrão.
    Se você fizer isso, poderá executar o script usando Alt F2 novamente. Você também será capaz de passar argumentos para isso como se estivesse em um shell.

    Você também pode adicionar qualquer outra pasta onde mantenha seus scripts em seu $PATH . Para fazer isso, abra ~/.profile no editor de texto de sua escolha:

    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    # see /usr/share/doc/bash/examples/startup-files for examples.
    # the files are located in the bash-doc package.
    
    # the default umask is set in /etc/profile; for setting the umask
    # for ssh logins, install and configure the libpam-umask package.
    #umask 022
    
    # if running bash
    if [ -n "$BASH_VERSION" ]; then
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
            . "$HOME/.bashrc"
        fi
    fi
    
    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    No final, adicione uma linha (substituindo <folder> por sua pasta) e salve o arquivo:

    PATH="<folder>:$PATH"
    

    Por exemplo, adiciono $HOME/.bin ao meu $PATH para que meus binários não ocupem minha pasta pessoal, mas você pode adicionar qualquer diretório ao seu caminho apenas para não adicionar nada perigoso (por exemplo, gravável pelo mundo).
    As alterações entrarão em vigor no próximo login.

        
    por Donarsson 04.11.2014 / 16:51