Comment passer des arguments de ligne de commande à un script via Dash? (14.04)

8

J'ai récemment posé cette question sur l'ajout d'un script shell à Dash:

En 14.04, comment exécuter un script bash que j'ai écrit sans ouvrir de terminal?

Cela a parfaitement fonctionné.

Question de suivi: comment passer des arguments de ligne de commande via Dash? Exemple: Dans ce cas, ma commande de tiret est nommée "Panel". Le script panneau mon écran avec 8 terminaux. Voici un exemple d'utilisation:

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

Etc. Comment passer des arguments comme --leftou --rightvia Dash? Idéalement, j'aimerais avoir ce flux de travail:

  • Appuyez sur la touche SUPER
  • Type panel --left(par exemple)
  • Le tableau de bord disparaît et le côté gauche est lambrissé.

À l'heure actuelle, il exécute le bon script, mais ignore --left.

Conseils?

Sir Robert
la source
1
@ RaduRădeanu: Merci, mais ce n'est certainement pas un doublon de cela. Cela indique comment fixer définitivement des options à un programme de lancement. Je veux pouvoir utiliser différentes options à tout moment (sans avoir plusieurs versions du lanceur).
Sir Robert
5
Pourquoi ne pas simplement utiliser Alt + F2? Ce serait probablement plus facile .. Une autre option serait de créer des fichiers .desktop séparés ..
Seth
1
... ou un fichier .desktop avec une liste rapide du lanceur.
Jacob Vlijm

Réponses:

16

Le problème est que vous ne pouvez pas "exécuter" un .desktopfichier depuis Dash avec des arguments, donc la configuration exactement comme vous l'avez en tête est impossible, je le crains. Cependant, en supposant que votre script ne arguments prendre, il y a quelques options alternatives élégantes, peut - être encore mieux:


  1. Enregistrez votre script dans ~/bin

    • supprimer l'extension
    • le rendre exécutable
    • exécutez-le en appuyant sur AltF2, tapez la commande

      <scriptname> <argument> 

  1. Créez une liste rapide dans le lanceur Unity:

    (en supposant que vous ayez enregistré le script ~/bin, l' aviez rendu exécutable et supprimé l'extension comme dans 1.)

    entrez la description de l'image ici

    [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;

    Enregistrer comme panel.desktopdans ~/.local/share/applicationset faites -le glisser sur le lanceur.


  1. Créez trois raccourcis clavier différents, par exemple Alt+ <, Alt+ ^, Alt+ >pour exécuter votre script + arguments:

    "Paramètres système"> "Clavier"> "Raccourcis"> "Raccourcis personnalisés"

    Cliquez sur "+" pour ajouter vos commandes: <scriptname> <argument>


  1. Pas la plus évidente, mais en explorant les options, il convient de mentionner: vous pouvez appeler une liste d'options (zenity) depuis Dash:

    entrez la description de l'image ici

    Tapez le premier caractère de votre option, appuyez sur Entrée et votre script s'exécutera avec l'argument choisi.

    entrez la description de l'image ici

    En supposant à nouveau que vous avez enregistré le script dans ~ / bin, que vous l'avez rendu exécutable et supprimé l'extension de langue comme dans 1:

    • Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous panel_options.sh, rendez-le exécutable.

      #!/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
    • Créez le fichier .desktop à partir du code ci-dessous. Dans la Icon=ligne, définissez le chemin d'accès à votre icône, dans la Exec=ligne le chemin d'accès pane_options.sh, enregistrez-le comme panel.desktopdans~/.local/share/applicatios

      [Desktop Entry]
      Name=Panel
      Exec=/path/to/panel_options.sh
      Icon=/path/to/some/icon
      Type=Application
      StartupWMClass=Zenity
Jacob Vlijm
la source
Réponse très complète. +1
Glutanimate
Très complet; excellente réponse. Vaut la générosité! Merci!
Sir Robert
0

D'après votre question d'origine, il semble que la bonne chose à faire serait de déplacer le script vers ~/bin/, qui devrait être dans votre $PATHpar défaut.
Si vous faites cela, vous pourrez à nouveau exécuter votre script en utilisant AltF2. Vous pourrez également lui passer des arguments comme vous le faites dans un shell.

Vous pouvez également ajouter tout autre dossier dans lequel vous conservez vos scripts $PATH. Pour ce faire, ouvrez ~/.profiledans l'éditeur de texte de votre choix:

# 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

À la fin, ajoutez une ligne (en la remplaçant <folder>par votre dossier) et enregistrez le fichier:

PATH="<folder>:$PATH"

Par exemple, j'ajoute $HOME/.binà mon $PATHafin que mes binaires n'encombrent pas mon dossier de départ, mais vous pouvez ajouter n'importe quel répertoire à votre chemin, assurez-vous de ne rien ajouter de dangereux (par exemple, accessible en écriture).
Les modifications prendront effet lors de la prochaine connexion.

Donarsson
la source