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
#!/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.