我創建了一個簡單的程序,它將目錄的路徑作爲輸入,創建該目錄的存檔(將其轉換爲單個文件),向該文件添加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
明確設置默認應用程序?
好吧,我去了文件的屬性。我去了Opens With選項卡並重置它,以便它現在不能用gedit打開。但是,當我嘗試通過雙擊現在執行該文件時,它說'無法顯示。該文件是未知類型。「爲什麼Ubuntu試圖顯示該文件?當我在我的文件管理器中進入Edit> Preferences> Behaviour'時,它告訴我Ubuntu必須要求我每次打開它時運行或查看可執行文本文件。我知道我的文件是一個可執行文件。我認爲問題在於它不是一個文本文件。 MIME類型的「application/octet-stream」。 – 2012-04-21 05:06:01
你可以發佈shebang和文件擴展名嗎? – 2012-07-02 00:45:55
@GuilhermeTorresCastro - 我按照您的要求編輯了我的問題。 – 2012-07-02 03:58:00