Как передать аргументы командной строки в сценарий через Dash? (14.04)

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

В 14.04 как мне запустить скрипт bash, который я написал, не открывая терминал?

Это сработало отлично.

Дополнительный вопрос: Как я могу передать аргументы командной строки через Dash? Пример: в этом случае моя команда тире называется "Панель". Скрипт панели моего экрана с 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 через тире? В идеале я хотел бы иметь этот рабочий процесс:

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

Сейчас он запускает правильный скрипт, но игнорирует --left,

Подсказки?

2 ответа

Решение

Проблема в том, что вы не можете "запустить" .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
      

Исходя из вашего первоначального вопроса, похоже, что правильно было бы переместить скрипт в ~/bin/, который должен быть в вашем $PATH по умолчанию.
Если вы сделаете это, вы сможете снова запустить свой скрипт, используя Alt F2. Вы также сможете передавать аргументы, как в оболочке.

Вы также можете добавить любую другую папку, где вы храните свои скрипты в $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 поэтому мои двоичные файлы не загромождают мою домашнюю папку, но вы можете добавить любой каталог к ​​своему пути, просто не добавляйте ничего опасного (например, доступного для записи).
Изменения вступят в силу при следующем входе в систему.

Другие вопросы по тегам