Jak mogę przekazać argumenty wiersza poleceń do skryptu za pomocą Dash? (14.04)

8

Niedawno zadałem to pytanie dotyczące dodawania skryptu powłoki do Dasha:

W 14.04 jak uruchomić skrypt bash, który napisałem bez otwierania terminala?

Działa idealnie.

Dalsze pytanie: jak przekazać argumenty wiersza poleceń za pomocą Dash? Przykład: w tym przypadku moje polecenie kreski nosi nazwę „Panel”. Skrypt wyświetla mój ekran za pomocą 8 terminali. Oto przykład użycia:

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

I tak dalej. Jak mogę przekazywać argumenty takie jak Dash --leftlub --rightpoprzez Dash? Idealnie chciałbym mieć ten przepływ pracy:

  • Naciśnij klawisz SUPER
  • Typ panel --left(na przykład)
  • Dash znika, a lewa strona jest obszyta panelami.

W tej chwili działa odpowiedni skrypt, ale ignoruje --left.

Porady

Sir Robert
źródło
możliwy duplikat Określ parametry programu uruchamiającego
Radu Rădeanu
1
@ RaduRădeanu: Dzięki, ale to zdecydowanie nie jest duplikat tego. To mówi, jak trwale dołączyć opcje do programu uruchamiającego. Chcę mieć możliwość korzystania z różnych opcji w dowolnym momencie (bez wielu wersji programu uruchamiającego).
Sir Robert
5
Dlaczego nie użyć po prostu Alt + F2? Prawdopodobnie byłoby to łatwiejsze. Inną opcją byłoby utworzenie osobnych plików .desktop ..
Seth
1
... lub jeden plik .desktop z szybką listą z programu uruchamiającego.
Jacob Vlijm

Odpowiedzi:

16

Problem polega na tym, że nie można „uruchomić” .desktoppliku z Dash z argumentami, więc obawiam się , że konfiguracja dokładnie taka, jaką masz na myśli, jest niemożliwa. Jednak zakładając, że skrypt nie przyjmują argumenty, istnieje kilka alternatywnych opcji eleganckie, może nawet lepiej:


  1. Zapisz swój skrypt w ~/bin

    • usuń rozszerzenie
    • sprawiają, że jest wykonywalny
    • uruchom go, naciskając AltF2, wpisz polecenie

      <scriptname> <argument> 

  1. Utwórz szybką listę w programie uruchamiającym Unity:

    (zakładając, że zapisałeś skrypt ~/bin, uczyniłeś go wykonywalnym i usunąłeś rozszerzenie jak w 1.)

    wprowadź opis zdjęcia tutaj

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

    Zapisz go jako panel.desktopw ~/.local/share/applicationsi przeciągnij go na wyrzutni.


  1. Utwórz trzy różne skróty klawiaturowe, na przykład Alt+ <, Alt+ ^, Alt+, >aby uruchomić skrypt + argumenty:

    „Ustawienia systemowe”> „Klawiatura”> „Skróty”> „Skróty niestandardowe”

    Kliknij „+”, aby dodać swoje polecenia: <scriptname> <argument>


  1. Nie jest to najbardziej oczywista, ale badając opcje, należy wspomnieć: możesz wywołać listę opcji (zenity) z Dash:

    wprowadź opis zdjęcia tutaj

    Wpisz pierwszy znak opcji, naciśnij klawisz Return, a skrypt uruchomi się z wybranym argumentem.

    wprowadź opis zdjęcia tutaj

    Ponownie zakładając, że zapisałeś skrypt w ~ / bin, sprawiłeś, że jest on wykonywalny i usunął rozszerzenie języka jak w 1:

    • Skopiuj poniższy skrypt do pustego pliku, zapisz go jako panel_options.sh, aby był wykonywalny.

      #!/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
    • Utwórz plik .desktop z poniższego kodu. W Icon=linii ustaw ścieżkę do ikony w Exec=wierszu ścieżkę do pane_options.sh, zapisz go jako panel.desktopw~/.local/share/applicatios

      [Desktop Entry]
      Name=Panel
      Exec=/path/to/panel_options.sh
      Icon=/path/to/some/icon
      Type=Application
      StartupWMClass=Zenity
Jacob Vlijm
źródło
Bardzo dokładna odpowiedź. +1
Glutanimate,
Bardzo dokładny; doskonała odpowiedź. Warto nagrodę! Dzięki!
Sir Robert,
0

Z twojego pierwotnego pytania, wydaje się, że właściwą rzeczą byłoby przeniesienie skryptu ~/bin/, który powinien być $PATHdomyślnie w twoim .
Jeśli to zrobisz, będziesz mógł ponownie uruchomić skrypt AltF2. Będziesz mógł także przekazywać mu argumenty, tak jak robisz to w powłoce.

Możesz także dodać dowolny inny folder, w którym przechowujesz skrypty $PATH. Aby to zrobić, otwórz ~/.profilew wybranym edytorze tekstu:

# 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

Na koniec dodaj wiersz (zastępując <folder>go folderem) i zapisz plik:

PATH="<folder>:$PATH"

Na przykład, dodaję $HOME/.bindo siebie, $PATHaby moje pliki binarne nie zaśmiecały mojego folderu domowego, ale możesz dodać dowolny katalog do swojej ścieżki, po prostu pamiętaj, aby nie dodać niczego niebezpiecznego (np. Do zapisu na świecie).
Zmiany wejdą w życie przy następnym logowaniu.

Donarsson
źródło