LINUX.ORG.RU

Как выполнить скрип в терминале из рофи, вызываемого хоткеем?

 


0

1

Есть папочка ~/scripts в которой лежат разные скрипты. Если в терминале дернуть рофи sh ~/scripts/$(ls ~/scripts | rofi -dmenu) то он покажет все файлы в папке как отдельные пункты меню и можно выбрать любой для запуска.
Но чот не могу сообразить как это же повторить с вызовом рофи хоткеем а не из терминала - подскажите пожалуйста о_О

★★★★★

Ну например вызывать по хоткею приложение терминала (gnome-terminal, konsole, xterm) с соответствующими параметрами, чтобы в нём запускался нужный скрипт (синтаксис зависит от конкретного приложения). Это если речь про то, чтобы консольное приложение запускалось в терминале, и можно было взаимодействовать с ним.

Если же вопрос, как вообще на хоткей что-то повесить, то это зависит от твоего DE.

Wapieth ★☆
()
Последнее исправление: Wapieth (всего исправлений: 2)
Ответ на: комментарий от Wapieth

Ну например вызывать по хоткею приложение терминала (gnome-terminal, konsole, xterm) с соответствующими параметрами

По идее должно работать либо так:

bindsym $mod+s exec "tilix -e 'sh ~/scripts/$(ls ~/scripts | rofi -dmenu'"

либо сяк:

bindsym $mod+s exec "tilix -e \"sh ~/scripts/$(ls ~/scripts | rofi -dmenu\""

но оба варианты ведут к провалу в и3 :(

я понадеялся на то что хтерм слопает все что после -е как аргумент но увы, тоже фиаско:

bindsym $mod+s exec "xterm -e sh ~/scripts/$(ls ~/scripts | rofi -dmenu"
rukez ★★★★★
() автор топика
Ответ на: комментарий от rukez

ой балбес, скобку потерял :D

tilix тоже умеет все что после -е жевать как последний аргумент, вот так заработало:

bindsym $mod+s exec "tilix -e sh ~/scripts/$(ls ~/scripts | rofi -dmenu)"
rukez ★★★★★
() автор топика

Если набор скриптов редко увеличивается и не нужно каждый раз задавать переменные, то как вариант — сделать графическую «обертку» на yad, yanity или zenity(фубля).

А уже для нее написать desktop-ярлык и подложить его в .local/share/applications/ (или где там rofi их ищет).

Тогда кстати, ее можно уже и просто разместить на bar'е.

hargard ★★★
()
Последнее исправление: hargard (всего исправлений: 1)

Я не до конца понял чего ты хочешь.

Тебе нужно запускать терминал и в нём исполнять скрипт, или просто выполнить скрипт в фоне?

Если скрипт требует интерактива, то без вариантов придётся запускать терминал, иначе скрипт либо вывалится с ошибкой (если используемые в нём утилиты корректно проверяют наличие stdin/stdout/stderr), либо будет в фоне ждать ввода, который пользователю недоступен. Вот простенький вариант:

#!/bin/sh

entry="$(ls ~/scripts | rofi -dmenu)"

case "${?}" in
  (0)
    if [ -t 0 ] && [ -t 1 ] && [ -t 2 ]; then
      sh "${entry}"
    else
      xterm -e "sh ${entry}"
    fi
    ;;
  (*) ;;
esac
mord0d ★★★★★
()
Ответ на: комментарий от rukez

коварство и предательство! что работает в и3 не работает в овсе

awful.key({ modkey,           }, "s", function() awful.spawn("tilix -e sh ~/scripts/$(ls ~/scripts | rofi -dmenu); read") end, {description = "scripts", group = "custom"})

в чем нюанс вызова такого из овса?

rukez ★★★★★
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария