在 Mac OS X 上,当您双击 .sh 文件时,会弹出一个终端窗口来运行该脚本并允许我与其交互。
在 Ubuntu 上,双击脚本,我立即看到它的效果:脚本运行了。只是,当我以这种方式启动它时,没有打开命令行窗口。当然,我可以从终端运行脚本,但如果有一个脚本文件夹,它们被组织在子文件夹中,然后双击脚本以将它们作为终端窗口启动,那就太酷了。请注意,我不愿意创建启动器(.desktop
文件),但我想全局应用它。
答案1
介绍
下面的脚本整合了几种 shell 操作方法gnome-terminal
,bash
创建了用于在图形终端中运行选定程序的右键菜单项。当然,这不是通过鼠标双击,但仍然是一个可用且快速的解决方案。通过右键单击并按 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 会将其视为一个命令,但实际上允许我们作为bash
shell 的子进程运行多个命令。这并不是什么新鲜事,而且早在之前就已展现。
最后,为了防止窗口立即退出,我们使用read
只读取的命令。它的基本用途是允许用户通过按 Enter 键关闭窗口(从 IDE 中的 C 编程中stdin
使用的技巧改编而来)getch()
文件管理器(又名 Nautilus)允许使用自定义脚本(放置在 `~/.local/nautilus/scripts 中)对选定的文件/文件夹进行操作。右键单击文件并选择脚本子菜单中的相应条目即可访问它们。
因此,将所有这些知识放在一起,我们就得到了上面看到的工作脚本。Python 只是我选择的一种语言,但同样的想法也可以在 perl、ruby、shell 脚本等中实现。