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

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

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

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

答案1

介绍

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

演示

假设我们在用 Nautilus 打开的某个目录中有一个测试脚本(仅打印“Hello World”并退出)。假设此脚本已具有可执行权限。右键单击文件,选择脚本 -> 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 Terminal(Ubuntu 上的默认终端)允许使用标志运行命令-e,但问题是它会等待命令退出。如果您有一个脚本或可执行文件,它只会在屏幕上打印一些内容并立即退出,那么您只会看到终端窗口闪烁并消失。

本质上它只允许运行一个命令。另一方面,如果我们使用bash -c 'command1;command2;command3',gnome-terminal 会将其视为一个命令,但实际上允许我们作为bashshell 的子进程运行多个命令。这并不是什么新鲜事,而且早在之前就已展现

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

文件管理器(又名 Nautilus)允许使用自定义脚本(放置在 `~/.local/nautilus/scripts 中)对选定的文件/文件夹进行操作。右键单击文件并选择脚本子菜单中的相应条目即可访问它们。

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

相关内容