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

8

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

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

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

Советы?

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

Donarsson
источник