Позвольте Наутилусу открыть сценарий как Окно терминала

На Mac OS X, когда Вы дважды щелкаете по .sh файлу, Окно терминала открывается, запуская скрипт и позволяя мне взаимодействовать с ним.

На Ubuntu, путем двойного щелчка по сценарию, я сразу вижу его эффекты: сценарий, работал. Только это, когда я запускаю его тот путь, никакое окно командной строки, открывается. Несомненно, я могу просто запустить скрипт от Терминала, но было бы здорово просто иметь папку Scripts, где они организованы в подпапках и дважды щелкают по сценариям для запуска их как Окон терминала. Обратите внимание, что я не готов создать Средство запуска (.desktop файл), но я хотел бы применить это глобально.

2
задан 29 August 2016 в 22:52

1 ответ

Введение

Сценарий ниже соединяет несколько идей как gnome-terminal и bash оболочка работает, для создания щелчка правой кнопкой menuentry для того, чтобы запустить выбранную программу в графическом терминале. Конечно, это не двойной щелчок через мышь, но все еще применимое и быстрое решение. Это может быть еще более быстро через щелчок правой кнопкой и совершающий нападки S ключ для быстрого вскакивания в подменю "Scripts". Кроме того, это может работать с несколькими выбранными файлами и откроет окно терминала для каждого из них.

Демонстрация

Предположим, что у нас есть сценарий тестера (который просто печатает "Привет Мир" и выходы) в некотором каталоге, открытом с Наутилусом. Позволяет предполагают, что этот сценарий уже имеет исполняемые полномочия. Щелкните правой кнопкой по файлу, выберите Сценарии-> run_with_terminal.py

enter image description here

Окно терминала будет появляться, и соответственно давать вывод и ожидать, пока пользователь не совершит нападки, Входят в выход.

Источник сценария

Также доступный на GitHub

#!/usr/bin/env python
from os import path
from sys import argv
from subprocess import call

for item in argv[1:]:
    full_path = path.abspath('./' + item)
    call(['gnome-terminal','-e', 
          "bash -c '" +  full_path + ";read'"])

Привилегированная версия

#!/usr/bin/env python
from os import path
from sys import argv
from subprocess import call

for item in argv[1:]:
    full_path = path.abspath('./' + item)
    call(['gnome-terminal','-e', 
          "pkexec bash -c '" +  full_path + ";read'"])

Принцип операции

Терминал Gnome (который является терминалом по умолчанию на Ubuntu) позволяет выполнять команду с -e флаг, но проблема - то, что она ожидает команды для выхода. Если у Вас будут сценарий или исполняемый файл, который только печатает что-то на экран и сразу выходит, то Вы будете только видеть, что окно терминала высвечивается и исчезает.

По существу это позволяет только выполнять одну команду. С другой стороны, если мы используем bash -c 'command1;command2;command3' , это будет рассматривать терминал гнома как одну команду, но позволило бы нам на самом деле выполнять несколько как дочерние процессы bash оболочка. Это не ничто нового и было показано значительно прежде.

Наконец, для хранения окна от непосредственного выхода мы используем read управляйте, чтобы просто читал stdin. Основное использование для этого должно позволить пользователю закрывать окно путем удара клавиши Enter (вид адаптированного приема от использования getch() от C, программирующего в IDE)

Файловый менеджер (иначе Наутилус) позволяет использование пользовательских сценариев (помещенный в '~/.local/nautilus/scripts), которые работают на выбранный файл/папку. Они доступны от щелчка правой кнопкой по файлу и выбора соответствующей записи в подменю Scripts.

Таким образом соединяя все это знание, мы получаем рабочий сценарий, который Вы видите выше. Python был просто предпочтительным языком для меня, но эта та же идея, возможно, была реализована в любом жемчуге, рубине, сценарии оболочки, и т.д.

3
ответ дан 2 December 2019 в 02:50

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

Похожие вопросы: