让Nautilus打开脚本作为终端窗口

在Mac OS X上,当您双击.sh文件时,会弹出一个终端窗口,运行该脚本并允许我与它进行交互。

在Ubuntu上,通过双击脚本,我立即看到它的效果:脚本运行。 只有这样,当我以这种方式启动时,不会打开命令行窗口。 当然,我可以从终端运行脚本,但是只有一个Scripts文件夹,在子文件夹中组织它们,双击脚本将它们作为终端窗口启动它会很酷。 请注意,我不愿意创建一个Launcher( .desktop文件),但我想全局应用它。

介绍

下面的脚本汇总了gnome-terminalbash shell如何操作的几个想法,创建一个右键菜单项,用于在图形终端中运行选定的程序。 当然,这不是通过鼠标双击,但仍然是一个可用和快速的解决方案。 通过右键单击并按S键快速跳转到“Scripts”子菜单可以更快。 此外,这可以使用多个选定的文件,并为每个文件打开终端窗口。

演示

假设我们在使用Nautilus打开的某个目录中有一个测试器脚本(仅打印“Hello World”并退出)。 让我们假设此脚本已具有可执行权限。 右键单击该文件,选择Scripts – > run_with_terminal.py

在此处输入图像描述

将出现终端窗口,并适当地给出输出,并等待用户按Enter键退出。

脚本来源

也可以在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' ,这将被gnome-terminal视为一个命令,但实际上允许我们运行几个作为bash shell的子进程。 这不是什么新鲜事, 很久以前就已经展示过 。

最后,为了防止窗口立即退出,我们使用只读取stdin read命令。 对此的基本用法是允许用户通过按Enter键来关闭窗口getch()在IDE中使用来自C编程的getch()一种改编技巧)

文件管理器(也称为Nautilus)允许使用对所选文件/文件夹进行操作的自定义脚本(位于`〜/ .local / nautilus / scripts中)。 右键单击文件并在“脚本”子菜单中选择适当的条目即可访问它们。

因此,将所有这些知识放在一起,我们得到您在上面看到的工作脚本。 Python只是我的首选语言,但同样的想法可以在perl,ruby,shell脚本等中实现。