Як я можу передати аргументи командного рядка до сценарію через Dash? (14.04)


8

Нещодавно я задав це питання щодо додавання сценарію оболонки до Dash:

У 14.04 як запустити сценарій bash, який я написав, не відкриваючи термінал?

Це спрацювало чудово.

Подальше запитання: Як я можу передавати аргументи командного рядка через тире? Приклад: У цьому випадку моя команда тире називається "Панель". Сценарій панелі мого екрана з 8 терміналами. Ось приклад використання:

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

І так далі. Як я можу передавати такі аргументи, як --leftабо --rightчерез Dash? В ідеалі я хотів би мати цей робочий процес:

  • Натисніть клавішу SUPER
  • Тип panel --left(наприклад)
  • Тире відходить, а ліва сторона - панель.

Зараз він виконує правильний сценарій, але ігнорує --left.

Поради?



1
@ RaduRădeanu: Дякую, але це, безумовно, не дублікат цього. Це говорить про те, як постійно закріплювати параметри програми запуску. Я хочу мати можливість використовувати різні варіанти, коли хочу (не маючи декількох версій запуску).
Сер Роберт

5
Чому б просто не використовувати Alt + F2? Це, мабуть, буде простіше .. Іншим варіантом було б створення окремих файлів .desktop ..
Сет

1
... або один .desktop файл із швидким списком із запуску.
Яків Влійм

Відповіді:


16

Проблема полягає в тому, що ви не можете "запустити" .desktopфайл з Dash з аргументами, тому налаштування точно так, як ви маєте на увазі, неможливо. Тим НЕ менше, передбачається , що ваш скрипт робить аргументи , брали є кілька елегантних альтернативних варіантів, може бути , навіть краще:


  1. Збережіть свій скрипт у ~/bin

    • видаліть розширення
    • зробити його виконуваним
    • запустіть його, натиснувши AltF2, введіть команду

      <scriptname> <argument> 

  1. Створіть швидкий список у панелі запуску Unity:

    (припустимо, що ви зберегли скрипт у ~/bin, зробили його виконуваним і видалили розширення, як у 1.)

    введіть тут опис зображення

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

    Збережіть його як panel.desktopу програмі ~/.local/share/applicationsта перетягніть його до панелі запуску.


  1. Створіть три різних комбінації клавіш, наприклад Alt+ <, Alt+ ^, Alt+ >для запуску сценарію + аргументів:

    "Налаштування системи"> "Клавіатура"> "Комбінації клавіш"> "Спеціальні ярлики"

    Натисніть "+", щоб додати свої команди: <scriptname> <argument>


  1. Не найочевидніший варіант, але, вивчаючи варіанти, слід згадати: ви можете викликати список параметрів (zenity) з Dash:

    введіть тут опис зображення

    Введіть перший символ вашої опції, натисніть return і ваш сценарій запуститься з обраним аргументом.

    введіть тут опис зображення

    Знову припустимо, що ви зберегли скрипт у ~ / bin, зробили його виконуваним та видалили розширення мови, як у 1 .:

    • Скопіюйте скрипт нижче в порожній файл, збережіть його як panel_options.shі зробіть його виконуваним.

      #!/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
      
    • Створіть .desktop файл із наведеного нижче коду. У Icon=рядку встановіть шлях до своєї піктограми, у Exec=рядку шлях до якого pane_options.shзбережіть як panel.desktopв~/.local/share/applicatios

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

Дуже ретельна відповідь. +1
Глютанімат

Дуже ретельно; відмінна відповідь. Варто щедрості! Дякую!
Сер Роберт

0

З вашого оригінального запитання, схоже, що правильним було б перемістити сценарій до ~/bin/, який повинен бути $PATHза замовчуванням.
Якщо ви це зробите, ви зможете запустити сценарій, використовуючи AltF2знову. Ви також зможете передавати йому аргументи, як ви робите в оболонці.

Ви також можете додати будь-яку іншу папку, де ви зберігаєте свої сценарії до свого $PATH. Для цього відкрийте ~/.profileу текстовому редакторі на ваш вибір:

# 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

В кінці додайте рядок (замінюючи <folder>свою папку) і збережіть файл:

PATH="<folder>:$PATH"

Наприклад, я додаю $HOME/.binдо своєї, $PATHщоб мої бінарні файли не захаращували мою домашню папку, але ви можете додати будь-який каталог до свого шляху, просто не забудьте додати нічого небезпечного (наприклад, для написання у всьому світі).
Зміни набудуть чинності під час наступного входу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.