2011-07-22 27 views
2

我需要一個shell腳本,它允許我從TextWrangler(A Mac App)排版Lilypond文件。 到目前爲止,我想出了這一點:Shell腳本用Textwrangler排版Lilypond文件

#!/bin/sh 
/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1 

其中,當然,不能正常工作。 (這就是爲什麼我在Stack Overflow)

當我運行該腳本從該的TextWrangler菜單認領,我得到這樣的輸出:

/Applications/LilyPond.app/Contents/Resources/bin/lilypond: option faultpaper, 
--output'' requires an argument 

是怎麼回事?

我正在運行Snow Leopard,TextWrangler和Lilypond。 幫助讚賞。

回答

0

好問題。它實際運行LilyPond的我的系統上,如果你這樣做:

#!/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1 

...但失敗了,因爲#不是一個行註釋字符所以LilyPond的嘗試來分析線。

使用塊註釋圍繞它失敗,因爲TextWrangler無法找到'shebang'行。

%{ 
#!/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1 
%} 

另一種方法是使用Smultron 3,它可以讓你定義commands,你可以使用鍵盤快捷鍵運行。

1

編輯:找到一種方法來獲取由TextWrangler發起的Unix腳本中的文檔路徑,所以我重寫了這一點。

在TextWrangler中有多種方法通過#!菜單,我不確定你試圖使用哪一個。不過,它看起來像你想創建一個Unix腳本來轉換你的LilyPond文檔。

由於您的錯誤提示,很遺憾,Unix腳本根本沒有任何參數,因此$1將爲空。但是,事實證明,最近版本的BBEdit/TextWrangler 做了在運行腳本之前設置了一些環境變量(請參閱BBEdit 9.3 Release Notes並向下滾動到更改)。特別是,你可以使用下面的環境變量:

BB_DOC_PATH   path of the document (not set if doc is unsaved) 

所以,保存this script~/Library/Application Support/TextWrangler/Unix Support/Unix Scripts,你應該是好去。

其他方式,你可能會想這樣做不很好地工作:

  • 使用UNIX過濾器:要做到這一點,你會在文檔中選擇所有的LilyPond的代碼,並將其保存到臨時文件中,該文件作爲參數傳遞給您的腳本。好的,這樣就可以爲您提供一個輸入文件名,但代價是麻煩。但是,默認情況下,該腳本的輸出(即LiiyPond編譯器輸出)會替換您剛剛選擇的任何內容,這可能不是您想要的內容。工作錯誤的工具。
  • 使用#! →在LilyPond文件上運行這涉及將#!行放在文件的頂部,讓TextWrangler嘗試將腳本作爲腳本執行,使用#!作爲選擇腳本解釋器的指南。不幸的是,#!行只適用於某些腳本語言,而LilyPond(不是一種腳本語言)不是其中的一種。這就是Peter Hilton想要做的事情,正如他所指出的那樣,如果您嘗試添加#,您將得到LilyPond語法錯誤!行到一個LilyPond文件的頂部。 (如果你很好奇,從技術上講,有一種方法可以讓#!→運行來工作,即使用here-document語法將LilyPond代碼嵌入到可執行shell或perl腳本中。但這是一個嚴重的黑客攻擊這將很快成爲笨拙)

上面有鏈接到腳本一些限制:

  • 它不檢查,以查看是否運行LilyPond的前保存文檔。在運行LilyPond之前讓TextWrangler自動保存會很好。
  • 它不能將文本片段或未保存的文檔作爲輸入,只保存文檔。

您可以製作更復雜的解決方案,通過轉向AppleScript解決這些問題。兩種方法:

  • 創建特定於TextWrangler的腳本並將其放入~/Library/Application Support/TextWrangler/Scripts。然後顯示在AppleScript菜單(奇怪的滾動S)中,或者您可以通過調出窗口→調色板→腳本。我只相信兩個人那裏去了沿着這條道路,並分享他們的結果:
  • 創建一個Mac OS服務,這可能是一種可以在任何文本編輯器中重複使用的方法。這就是我們在NeXT時代用來編輯通用音樂文件的方式,所以我可以證明它的優雅。不幸的是,我沒有一個很好的最新例子。