Wie kann ich Befehlszeilenargumente über Dash an ein Skript übergeben? (14.04)

8

Ich habe kürzlich diese Frage zum Hinzufügen eines Shell-Skripts zu Dash gestellt:

Wie führe ich in 14.04 ein Bash-Skript aus, das ich geschrieben habe, ohne ein Terminal zu öffnen?

Es hat perfekt funktioniert.

Folgefrage: Wie kann ich Befehlszeilenargumente über Dash übergeben? Beispiel: In diesem Fall heißt mein Dash-Befehl "Panel". Das Skript zeigt 8 Bildschirme auf meinem Bildschirm an. Hier ist ein Beispiel für die Verwendung:

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

Und so weiter. Wie kann ich Argumente wie --leftoder --rightüber Dash weitergeben? Idealerweise möchte ich diesen Workflow haben:

  • Drücken Sie die SUPER-Taste
  • Typ panel --left(zum Beispiel)
  • Das Armaturenbrett verschwindet und die linke Seite ist getäfelt.

Im Moment läuft das richtige Skript, ignoriert es aber --left.

Tipps?

Sir Robert
quelle
Mögliches Duplikat von Parameter für
Startprogramm angeben
1
@ RaduRădeanu: Danke, aber das ist definitiv kein Duplikat davon. Hier erfahren Sie, wie Sie Optionen dauerhaft an ein Startprogramm anhängen. Ich möchte in der Lage sein, verschiedene Optionen zu verwenden, wann immer ich möchte (ohne mehrere Versionen des Launchers zu haben).
Sir Robert
5
Warum nicht einfach Alt + F2 verwenden? Das wäre wahrscheinlich einfacher. Eine andere Option wäre das Erstellen separater .desktop-Dateien.
Seth
1
... oder eine .desktop-Datei mit einer Quicklist aus dem Launcher.
Jacob Vlijm

Antworten:

16

Das Problem ist, dass Sie eine .desktopDatei nicht mit Argumenten aus Dash "ausführen" können , so dass das Setup genau so ist, wie Sie es sich vorgestellt haben, fürchte ich. Jedoch Ihr Skript unter der Annahme , tut nehmen Argumente, gibt es ein paar elegante Alternative Möglichkeiten sind, vielleicht noch besser:


  1. Speichern Sie Ihr Skript in ~/bin

    • Entfernen Sie die Erweiterung
    • mach es ausführbar
    • Führen Sie es durch Drücken von aus AltF2und geben Sie den Befehl ein

      <scriptname> <argument> 

  1. Erstellen Sie im Unity Launcher eine Quicklist:

    (Angenommen, Sie haben das Skript in gespeichert ~/bin, es ausführbar gemacht und die Erweiterung wie in 1 entfernt.)

    Geben Sie hier die Bildbeschreibung ein

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

    Speichern Sie es als panel.desktopin ~/.local/share/applicationsund ziehen Sie es auf den Launcher.


  1. Erstellen Sie drei verschiedene Tastaturkürzel, z. B. Alt+ <, Alt+ ^, Alt+ >, um Ihre Skriptargumente auszuführen:

    "Systemeinstellungen"> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen"

    Klicken Sie auf "+", um Ihre Befehle hinzuzufügen: <scriptname> <argument>


  1. Nicht die offensichtlichste, aber das Erkunden der Optionen sollte erwähnt werden: Sie können eine (Zenity-) Optionsliste von Dash aus aufrufen:

    Geben Sie hier die Bildbeschreibung ein

    Geben Sie das erste Zeichen Ihrer Option ein, drücken Sie die Eingabetaste, und Ihr Skript wird mit dem ausgewählten Argument ausgeführt.

    Geben Sie hier die Bildbeschreibung ein

    Wieder unter der Annahme, dass Sie das Skript in ~ / bin gespeichert, ausführbar gemacht und die Spracherweiterung wie in 1 entfernt haben:

    • Kopieren Sie das folgende Skript in eine leere Datei, speichern Sie es unter panel_options.shund machen Sie es ausführbar.

      #!/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
      
    • Erstellen Sie die .desktop-Datei aus dem folgenden Code. In der Icon=Linie, stellen Sie den Pfad zu Ihrem Symbol, in der Exec=Linie der Weg pane_options.sh, speichern Sie es als panel.desktopin~/.local/share/applicatios

      [Desktop Entry]
      Name=Panel
      Exec=/path/to/panel_options.sh
      Icon=/path/to/some/icon
      Type=Application
      StartupWMClass=Zenity
      
Jacob Vlijm
quelle
Sehr gründliche Antwort. +1
Glutanimate
Sehr ausführlich; ausgezeichnete Antwort. Das Kopfgeld wert! Vielen Dank!
Sir Robert
0

Aus Ihrer ursprünglichen Frage geht hervor, dass es das Richtige ist, das Skript zu verschieben ~/bin/, das $PATHstandardmäßig in Ihrem Skript enthalten sein sollte .
In diesem Fall können Sie Ihr Skript AltF2erneut ausführen . Sie können ihm auch Argumente übergeben, wie Sie es in einer Shell tun.

Sie können auch einen anderen Ordner hinzufügen, in dem Sie Ihre Skripte aufbewahren $PATH. Öffnen Sie dazu ~/.profileden Texteditor Ihrer Wahl:

# 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

Fügen Sie am Ende eine Zeile hinzu (ersetzen Sie sie <folder>durch Ihren Ordner) und speichern Sie die Datei:

PATH="<folder>:$PATH"

Zum Beispiel füge $HOME/.binich $PATHmeinem hinzu , damit meine Binärdateien meinen Home-Ordner nicht überladen, aber Sie können Ihrem Pfad ein beliebiges Verzeichnis hinzufügen. Achten Sie jedoch darauf, dass Sie nichts Gefährliches hinzufügen (z. B. weltbeschreibbar).
Die Änderungen werden beim nächsten Login wirksam.

Donarsson
quelle