¿Cómo puedo pasar argumentos de línea de comando a un script a través de Dash? (14.04)


8

Hace poco hice esta pregunta sobre cómo agregar un script de shell a Dash:

En 14.04, ¿cómo ejecuto un script bash que escribí sin abrir una terminal?

Funcionó perfectamente.

Pregunta de seguimiento: ¿Cómo puedo pasar argumentos de línea de comandos a través de Dash? Ejemplo: en este caso, mi comando de guión se llama "Panel". El guión recubre mi pantalla con 8 terminales. Aquí hay un ejemplo del 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

Y así. ¿Cómo puedo pasar argumentos como --lefto a --righttravés de Dash? Idealmente, me gustaría tener este flujo de trabajo:

  • Presione la tecla SUPER
  • Tipo panel --left(por ejemplo)
  • Dash desaparece y el lado izquierdo está panelado.

En este momento ejecuta el script correcto, pero lo ignora --left.

¿Consejos?



1
@ RaduRădeanu: Gracias, pero definitivamente no es un duplicado de eso. Eso indica cómo colocar permanentemente las opciones en un programa de inicio. Quiero poder usar diferentes opciones cuando quiera (sin tener varias versiones del lanzador).
Sir Robert

55
¿Por qué no solo usar Alt + F2? Probablemente sea más fácil ... Otra opción sería crear archivos .desktop separados ...
Seth

1
... o un archivo .desktop con una lista rápida del lanzador.
Jacob Vlijm

Respuestas:


16

El problema es que no puede "ejecutar" un .desktoparchivo desde Dash con argumentos, por lo que me temo que la configuración exactamente como la tiene en mente es imposible. Sin embargo, asumiendo que su escritura hace argumentos para llevar, hay algunas opciones alternativas elegantes, tal vez incluso mejor:


  1. Guarda tu guión en ~/bin

    • eliminar la extensión
    • hazlo ejecutable
    • ejecútelo presionando AltF2, escriba el comando

      <scriptname> <argument> 

  1. Cree una lista rápida en el iniciador de Unity:

    (suponiendo que guardó el script ~/bin, lo hizo ejecutable y eliminó la extensión como en 1.)

    ingrese la descripción de la imagen aquí

    [Desktop Entry]
    Name=name_of_your_script_like_you_see_it_in_Dash
    Exec=<scriptname> <default_argument>
    Icon=/path/to/some/icon
    Type=Application
    
    Actions=Panel;Panel -left;Panel -right;
    
    [Desktop Action Panel]
    Name=Panel
    Exec=<scriptname> <default_argument>
    OnlyShowIn=Unity;
    
    [Desktop Action Panel -left]
    Name=Panel -left
    Exec=<scriptname> <argument_1>
    OnlyShowIn=Unity;
    
    [Desktop Action Panel -left]
    Name=Panel -right
    Exec=<scriptname> <argument_2>
    OnlyShowIn=Unity;

    Guárdelo como panel.desktopen ~/.local/share/applicationsy arrástrelo al iniciador.


  1. Cree tres métodos abreviados de teclado diferentes, por ejemplo Alt+ <, Alt+ ^, Alt+ >para ejecutar sus argumentos de script +:

    "Configuración del sistema"> "Teclado"> "Atajos"> "Atajos personalizados"

    Haga clic en "+" para agregar sus comandos: <scriptname> <argument>


  1. No es el más obvio, pero debe mencionarse la exploración de las opciones: puede llamar a una lista de opciones (zenity) desde Dash:

    ingrese la descripción de la imagen aquí

    Escriba el primer carácter de su opción, presione Intro y su secuencia de comandos se ejecutará con el argumento elegido.

    ingrese la descripción de la imagen aquí

    Una vez más, suponiendo que guardó el script en ~ / bin, lo hizo ejecutable y eliminó la extensión de idioma como en 1 .:

    • Copie el script a continuación en un archivo vacío, guárdelo como panel_options.sh, hágalo ejecutable.

      #!/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
    • Cree el archivo .desktop a partir del siguiente código. En la Icon=línea, establezca la ruta a su icono, en la Exec=línea a la ruta pane_options.sh, guárdela como panel.desktopen~/.local/share/applicatios

      [Desktop Entry]
      Name=Panel
      Exec=/path/to/panel_options.sh
      Icon=/path/to/some/icon
      Type=Application
      StartupWMClass=Zenity

Respuesta muy completa. +1
Glutanimate

Muy minucioso; Excelente respuesta. Vale la pena la recompensa! ¡Gracias!
Sir Robert el

0

Según su pregunta original, parece que lo correcto sería mover el script a ~/bin/, que debería estar en su $PATHvalor predeterminado.
Si hace esto, podrá ejecutar su script AltF2nuevamente. También podrá pasarle argumentos como lo hace en un shell.

También puede agregar cualquier otra carpeta donde guarde sus scripts en su archivo $PATH. Para hacer esto, abra ~/.profileen el editor de texto de su elección:

# 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

Al final, agregue una línea (reemplazando <folder>con su carpeta) y guarde el archivo:

PATH="<folder>:$PATH"

Por ejemplo, agrego $HOME/.bina mi $PATHpara que mis archivos binarios no abarroten mi carpeta de inicio, pero puede agregar cualquier directorio a su ruta, solo asegúrese de no agregar nada peligroso (por ejemplo, world-writeable).
Los cambios tendrán efecto en el próximo inicio de sesión.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.