Come posso passare gli argomenti della riga di comando a uno script tramite Dash? (14.04)


8

Di recente ho posto questa domanda sull'aggiunta di uno script di shell a Dash:

Nel 14.04 come posso eseguire uno script bash che ho scritto senza aprire un terminale?

Ha funzionato perfettamente.

Domanda di follow-up: come posso passare gli argomenti della riga di comando tramite Dash? Esempio: in questo caso, il mio comando trattino si chiama "Pannello". La sceneggiatura del mio schermo con 8 terminali. Ecco un esempio dell'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 così via. Come posso passare argomenti come --lefto --righttramite Dash? Idealmente mi piacerebbe avere questo flusso di lavoro:

  • Premere il tasto SUPER
  • Tipo panel --left(ad esempio)
  • Il tratteggio scompare e il lato sinistro è rivestito con pannelli.

In questo momento esegue lo script giusto, ma ignora --left.

Suggerimenti?



1
@ RaduRădeanu: Grazie, ma questo non è assolutamente un duplicato. Questo spiega come apporre permanentemente le opzioni a un programma di avvio. Voglio essere in grado di utilizzare diverse opzioni ogni volta che voglio (senza avere più versioni del programma di avvio).
Sir Robert,

5
Perché non usare semplicemente Alt + F2? Probabilmente sarebbe più facile .. Un'altra opzione sarebbe la creazione di file .desktop separati ..
Seth

1
... o un file .desktop con una lista rapida dal programma di avvio.
Jacob Vlijm,

Risposte:


16

Il problema è che non è possibile "eseguire" un .desktopfile da Dash con argomenti, quindi l'installazione è esattamente come hai in mente è impossibile, temo. Tuttavia, supponendo che lo script non accettano argomenti, ci sono alcune opzioni alternative eleganti, forse anche meglio:


  1. Salva il tuo script in ~/bin

    • rimuovere l'estensione
    • renderlo eseguibile
    • eseguirlo premendo AltF2, digitare il comando

      <scriptname> <argument> 

  1. Crea un elenco rapido nel programma di avvio di Unity:

    (supponendo che tu abbia salvato lo script ~/bin, reso eseguibile e rimosso l'estensione come in 1.)

    inserisci qui la descrizione dell'immagine

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

    Salvalo come panel.desktopin ~/.local/share/applicationse trascinalo sul programma di avvio.


  1. Crea tre diverse scorciatoie da tastiera, ad esempio Alt+ <, Alt+ ^, Alt+ >per eseguire lo script + argomenti:

    "Impostazioni di sistema"> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate"

    Fai clic su "+" per aggiungere i tuoi comandi: <scriptname> <argument>


  1. Non il più ovvio, ma esplorando le opzioni, va menzionato: puoi chiamare un elenco di opzioni (zenity) da Dash:

    inserisci qui la descrizione dell'immagine

    Digita il primo carattere della tua opzione, premi Invio e lo script verrà eseguito con l'argomento scelto.

    inserisci qui la descrizione dell'immagine

    Supponendo ancora che tu abbia salvato lo script in ~ / bin, lo abbia reso eseguibile e rimosso l'estensione della lingua come in 1 .:

    • Copia lo script seguente in un file vuoto, salvalo come panel_options.sh, rendilo eseguibile.

      #!/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
    • Crea il file .desktop dal seguente codice. Nella Icon=riga, imposta il percorso dell'icona, nella Exec=riga il percorso pane_options.sh, salvalo come panel.desktopin~/.local/share/applicatios

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

Risposta molto approfondita. +1
Glutanimate,

Molto approfondito; risposta eccellente. Vale la pena! Grazie!
Sir Robert,

0

Dalla tua domanda originale, sembra che la cosa giusta da fare sarebbe spostare lo script in ~/bin/, che dovrebbe essere nella tua $PATHimpostazione predefinita.
Se lo fai, sarai in grado di eseguire AltF2nuovamente lo script . Sarai anche in grado di passargli argomenti come fai in una shell.

Puoi anche aggiungere qualsiasi altra cartella in cui tieni gli script nel tuo $PATH. Per fare ciò, apri ~/.profilel'editor di testo che preferisci:

# 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

Alla fine, aggiungi una riga (sostituendo <folder>con la tua cartella) e salva il file:

PATH="<folder>:$PATH"

Ad esempio, aggiungo $HOME/.binal mio in $PATHmodo che i miei binari non ingombrino la mia cartella home, ma potresti aggiungere qualsiasi directory al tuo percorso solo assicurandoti di non aggiungere nulla di pericoloso (ad esempio scrivibile in tutto il mondo).
Le modifiche avranno effetto al prossimo accesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.