使用 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 。打开扩展名为 .pack 使用 opm 的文件会告诉它它是一个存档,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文件,转到Properties窗口,Open With选项卡并将opm.desktop设置为默认应用程序,将.pack文件与opm相关联。现在,我只需打开.pack文件即可解压缩该文件。

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

如果已经有与 .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/文件夹中。(你已经这样做了)

最新更新