用shebang执行二进制文件

时间:2012-04-20 17:33:16

标签: binaryfiles chmod ubuntu-11.10 gedit shebang

我创建了一个简单的程序,它将目录的路径作为输入,创建该目录的存档(将其转换为单个文件),向该文件添加一个shebang(以便文件的内容可以是容易提取),并将文件写入指定路径的基目录。

问题是当我双击文件时文件不会自行提取。相反,操作系统(我正在使用Ubuntu 11.10)尝试使用gedit打开它。这显然显示了shebang,随机乱码以及存档文件的内容。

我首先使用chmod +x使文件可执行;当它仍然无法工作时,我尝试了chmod 777。但是,当我双击它时,它仍然拒绝用shebang执行该文件。也许这是因为它不是纯文本文件。

有趣的是,当我尝试直接从命令行执行文件时,它会读取shebang并正确提取存档的内容。所以我的文件格式没有任何问题。我不太了解双击某个文件时操作系统会做什么,但我很乐意理解。

如果您仍然需要从命令行手动执行它,那么将shebang添加到文件中毫无意义。一个优点可能是您不需要指定程序来打开它,但我相信这不是一个优势。任何帮助将不胜感激。

更新1:

创建存档的程序称为 opm 。可以使用以下命令通过节点包管理器安装它:

npm install opm

之后,您只需使用 opm 为您打包和解压缩目录。例如,如果我的主目录中有一个名为test的目录,那么我可以打开一个终端并执行以下命令来打包它:

opm test

这将在主目录中创建名为test.pack的目录的存档。 .pack文件包含shebang #!/usr/bin/opm。使用 opm 打开扩展名为.pack的文件会告诉它它是一个存档,而 opm 会将其解压缩到同一目录中。

注意:如果您不希望它覆盖现有的test.pack目录,请更改test文件的名称。

我将shebang添加到.pack文件中,以便在我打开它时它会自行提取。然而,这似乎不起作用。然而,如果我运行以下命令之一,那么它可以工作:

./test.pack

您可以查看我的源代码,并根据需要对程序进行任何修改。

更新2:

好吧我为 opm 创建了以下.desktop文件,并将其存储在$HOME/.local/share/applications/目录中:

[Desktop Entry]
Type=Application
Version=1.0
Encoding=UTF-8
Name=OPM
GenericName=Object Packer and Minifier
NoDisplay=true
Comment=JavaScript Package Manager
TryExec=opm
Exec=opm %f
Terminal=false
MimeType=application/opm

现在,我可以通过右键单击.pack文件,将.pack个文件与 opm 相关联,转到Properties窗口,{{1选项卡,并将Open With设置为默认应用程序。现在我只需打开它即可解压缩opm.desktop文件。

但是,我想知道如何将.pack个文件与mime类型.pack相关联。目前,application/opm文件与.pack相关联。我该怎么办?如果我使用不同的扩展名(例如application/x-java-pack200)会更好吗?通过将打包的存档与mime类型.opm相关联,操作系统默认情况下会使用 opm 打开它们,而无需从application/opm显式设置默认应用程序?

1 个答案:

答案 0 :(得分:1)

如果已经存在与.pack关联的MIME类型,那么您将需要使用不同的扩展名(.opm)来关联MIME类型(application / opm)。自动关联打开特定MIME类型文件的程序的方式是xdg-mime

可替换地,

  • 修改~/.local/share/applications/mimeapps.list并将您的MIME /应用程序组合放在[默认应用程序]下,如下所示:
[Default Applications]
application/opm=opm.desktop;
  • opm.desktop文件放在~/.local/share/applications/文件夹中。 (你已经这样做了)