2012-04-20 229 views
1

我創建了一個簡單的程序,它將目錄的路徑作爲輸入,創建該目錄的存檔(將其轉換爲單個文件),向該文件添加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目錄,請更改test.pack文件的名稱。

我將文件添加到.pack文件中,以便在我打開文件時自動提取文件。但是,這似乎並不奏效。不過,如果我運行下面的命令之一,那麼它的工作原理:

./test.pack 

你可以檢查我的源代碼和進行任何修改,因爲您可能希望該程序。

更新2:

好吧,我創建了以下.desktop文件OPM並將其存儲在$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文件與OPM關聯右鍵單擊.pack文件,進入Properties窗口,Open With選項卡和setti ng opm.desktop作爲默認應用程序。現在我可以通過簡單地打開.pack文件來解壓縮文件。

但是,我想知道如何將.pack文件與MIME類型application/opm關聯。目前.pack文件與application/x-java-pack200相關聯。我該怎麼做?如果我使用不同的擴展名(例如.opm)會更好嗎?通過將打包檔案與MIME類型application/opm相關聯,操作系統默認打開它們是opm,而不必從Properties > Open With明確設置默認應用程序?

+0

好吧,我去了文件的屬性。我去了Opens With選項卡並重置它,以便它現在不能用gedit打開。但是,當我嘗試通過雙擊現在執行該文件時,它說'無法顯示。該文件是未知類型。「爲什麼Ubuntu試圖顯示該文件?當我在我的文件管理器中進入Edit> Preferences> Behaviour'時,它告訴我Ubuntu必須要求我每次打開它時運行或查看可執行文本文件。我知道我的文件是一個可執行文件。我認爲問題在於它不是一個文本文件。 MIME類型的「application/octet-stream」。 – 2012-04-21 05:06:01

+0

你可以發佈shebang和文件擴展名嗎? – 2012-07-02 00:45:55

+0

@GuilhermeTorresCastro - 我按照您的要求編輯了我的問題。 – 2012-07-02 03:58:00

回答

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/夾。 (你已經這樣做了)
+0

謝謝。我編輯了'mimeapps.list'文件,現在它就像一個魅力。 =) – 2012-07-06 04:28:04

相關問題