我需要一个shell脚本,它将允许我从TextWrangler (Mac应用程序)排版Lilypond文件。到目前为止,我已经想出了这个:
#!/bin/sh
/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1
当然不能用。(这就是为什么我在Stack Overflow。)
当我从TextWrangler中的shebang菜单中运行该脚本时,我得到以下输出:
/Applications/LilyPond.app/Contents/Resources/bin/lilypond: option faultpaper,
--output'' requires an argument
给了什么?
我正在运行Snow Leopard, textrangler和Lilypond。帮助感激。
EDIT:找到了一种在texttwrangler启动的Unix脚本中获取文档路径的方法,所以我重写了这个
有多种方法可以通过#!菜单,我不确定您要使用哪个。但是,它看起来就像您正在尝试创建一个Unix脚本来转换您的LilyPond文档。
正如您的错误提示,不幸的是,Unix脚本根本没有给出任何参数,因此$1
将为空。然而,最新版本的BBEdit/TextWrangler 确实在运行脚本之前设置了一些环境变量(参见BBEdit 9.3发行说明并向下滚动到Changes)。特别是,您可以使用以下环境变量:
BB_DOC_PATH path of the document (not set if doc is unsaved)
那么,保存这个脚本到~/Library/Application Support/TextWrangler/Unix Support/Unix Scripts
,你应该很好去。
你可能会尝试其他不太好用的方法:
- 使用Unix Filter:要做到这一点,您必须选择文档中的所有LilyPond代码,并将其保存到一个临时文件中,该文件将作为参数传递给脚本。这就得到了一个输入文件名,代价是有些麻烦。但是,该脚本的输出(即LiiyPond编译器输出)默认情况下会替换您刚刚选择的任何内容,这可能不是您想要的。使用错误的工具。 使用<<li> strong> # !→在LilyPond文件上运行:这包括在文件的顶部放置
#!
行,并让TextWrangler尝试将文件作为脚本执行,使用#!
作为选择脚本解释器的指南。不幸的是,#!
行只适用于某些脚本语言,而LilyPond(不完全是脚本语言)不是其中之一。这就是Peter Hilton正在尝试做的事情,正如他所指出的,如果您尝试添加#,您将获得LilyPond语法错误!行放到LilyPond文件的顶部。(如果您很好奇,从技术上讲,有一种方法可以获得#!→运行工作,这是嵌入你的LilyPond代码到一个可执行的shell或perl脚本,使用这里的文档语法。但这是一个很粗糙的黑客,很快就会变得笨拙。)上面链接的脚本有一些限制:
- 在运行LilyPond之前,它不会检查你是否保存了文档。如果能在运行LilyPond之前自动保存TextWrangler就好了。
- 它不能接受文本片段或未保存的文档作为输入,只能接受保存的文档。
你可以通过使用AppleScript来实现更复杂的解决方案。有两种方法:
- 创建一个特定于TextWrangler的脚本并将其放在
~/Library/Application Support/TextWrangler/Scripts
中。然后它出现在AppleScript菜单中(奇怪的滚动S),或者你可以通过打开窗口→调色板→脚本来获得它。我相信有两个人已经走了这条路,并分享了他们的成果:- Henk van Voorthuijsen (Lilypond.)applescript for TextWrangler thread on lilyppond -devel, 21- july -2008)
- Dr Nicola Vitacolonna (LilyPond in TextWrangler - uses TeXShop).
- 创建一个Mac OS Service,这可能是一个可以在任何文本编辑器中重用的方法。这就是我们在NeXT时代编译Common Music文件的方式,所以我可以证明它的优雅。不幸的是,我没有一个很好的最新例子。
问得好。它实际上在我的系统上运行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
。