Как передать аргументы командной строки в сценарий через 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 с аргументами, так что установка точно так же, как вы имеете в виду, невозможна. Однако, если ваш сценарий принимает аргументы, есть несколько элегантных альтернативных вариантов, возможно, даже лучше:
Сохраните ваш скрипт в
~/bin
- удалить расширение
- сделать его исполняемым
запустите его, нажав AltF2, введите команду
<scriptname> <argument>
Создайте быстрый список в панели запуска 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
и перетащите его на панель запуска.
Создайте три разных сочетания клавиш, например, Alt+<, Alt+^, Alt+>, чтобы запустить ваш скрипт + аргументы:
"Системные настройки" > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки"
Нажмите "+", чтобы добавить свои команды:
<scriptname> <argument>
Не самый очевидный, но исследуя варианты, следует упомянуть: вы можете вызвать список опций (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
поэтому мои двоичные файлы не загромождают мою домашнюю папку, но вы можете добавить любой каталог к своему пути, просто не добавляйте ничего опасного (например, доступного для записи).
Изменения вступят в силу при следующем входе в систему.