Deixe o Nautilus abrir script como janela do Terminal

2

No Mac OS X, quando você clica duas vezes em um arquivo .sh, uma janela do Terminal aparece executando o script e permitindo que eu interaja com ele.

No Ubuntu, clicando duas vezes em um script, vejo imediatamente seus efeitos: o script é executado. Só que, quando eu inicio dessa forma, nenhuma janela de linha de comando é aberta. Claro, eu posso apenas executar o script do Terminal, mas seria legal apenas ter uma pasta Scripts, onde eles são organizados em subpastas e clicar duas vezes em scripts para iniciá-los como janelas do Terminal. Note que não estou disposto a criar um Launcher ( .desktop file), mas gostaria de aplicar isso globalmente.

    
por alex2003super 29.08.2016 / 21:52

1 resposta

3

Introdução

O script abaixo reúne várias idéias de como gnome-terminal e bash shell operam, para criar uma entrada de menu com o botão direito para executar um programa selecionado no terminal gráfico. Claro, isso não é duplo clique via mouse, mas ainda é uma solução rápida e utilizável. Pode ser ainda mais rápido com o botão direito do mouse e pressionando a tecla S para pular rapidamente para o submenu "Scripts". Além disso, isso pode funcionar com vários arquivos selecionados e abrirá a janela do terminal para cada um deles.

Demo

Suponha que tenhamos um script de teste (que simplesmente imprime "Hello World" e sai) em algum diretório aberto com o Nautilus. Vamos supor que esse script já tenha permissões executáveis. Clique com o botão direito no arquivo, selecione Scripts - > run_with_terminal.py

AjaneladoterminalseráexibidaeforneceráadequadamenteasaídaeaguardaráatéqueousuáriopressioneEnterparasair.

Origemdoscript

Tambémdisponívelem 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'"])

Versão privilegiada

#!/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'"])

Princípio de funcionamento

O Gnome Terminal (que é o terminal padrão no Ubuntu) permite executar um comando com -e flag, mas o problema é que ele aguarda o comando sair. Se você tiver um script ou executável que imprima apenas algo na tela e saia imediatamente, você verá apenas a janela do terminal piscar e desaparecerá.

Essencialmente, permite apenas executar um comando. Por outro lado, se usarmos bash -c 'command1;command2;command3' , isso será tratado pelo gnome-terminal como um comando, mas nos permitirá de fato executar vários processos filhos do shell bash . Isso não é novidade e foi mostrado muito antes .

Finalmente, para evitar que a janela saia imediatamente, usamos o comando read que apenas lê stdin . O uso básico para isso é permitir que o usuário feche a janela pressionando a tecla Enter (uma espécie de truque adaptado usando getch() da programação C em um IDE)

O gerenciador de arquivos (também conhecido como Nautilus) permite o uso de scripts personalizados (colocados em '~ / .local / nautilus / scripts) que operam no arquivo / pasta selecionado. Eles podem ser acessados clicando com o botão direito do mouse no arquivo e selecionando a entrada apropriada no submenu Scripts.

Assim, juntando todo esse conhecimento, obtemos o script de trabalho que você vê acima. O Python era apenas uma linguagem de escolha para mim, mas essa mesma ideia poderia ter sido implementada em perl, ruby, shell script, etc.

    
por Sergiy Kolodyazhnyy 09.09.2016 / 13:01