我创建了一个简单的程序,它将目录的路径作为输入,创建该目录的存档(将其转换为单个文件),向该文件添加一个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
显式设置默认应用程序?
答案 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/
文件夹中。 (你已经这样做了)