首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Textwrangler排版Lilypond文件的Shell脚本

使用Textwrangler排版Lilypond文件的Shell脚本
EN

Stack Overflow用户
提问于 2011-07-22 22:13:37
回答 2查看 765关注 0票数 2

我需要一个外壳脚本,将允许我排版从TextWrangler (一个Mac应用程序)的Lilypond文件。到目前为止,我已经想出了这个:

代码语言:javascript
复制
#!/bin/sh
/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1

当然,这是行不通的。(这就是我在Stack Overflow的原因。)

当我从TextWrangler中的shebang菜单运行该脚本时,我得到以下输出:

代码语言:javascript
复制
/Applications/LilyPond.app/Contents/Resources/bin/lilypond: option faultpaper,
--output'' requires an argument

怎么回事?

我在运行雪豹,TextWrangler和Lilypond。感谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2012-01-06 16:52:29

Unix编辑:找到了一种在TextWrangler启动的脚本中获取文档路径的方法,所以我重写了这段代码。

在TextWrangler中,通过#!菜单可以使用多种方式处理脚本,我不确定您要使用哪种方式。不过,看起来您正在尝试创建一个Unix脚本来转换您的LilyPond文档。

正如你的错误提示,不幸的是,Unix脚本根本没有任何参数,所以$1将是空的。然而,事实证明,BBEdit/TextWrangler的最新版本确实在运行脚本之前设置了一些环境变量(参见BBEdit 9.3 Release Notes并向下滚动到Changes)。特别是,您可以使用以下环境变量:

代码语言:javascript
复制
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语法错误。(如果您很好奇,从技术上讲,有一种方法可以让#!perl运行正常工作,即使用here-document语法将LilyPond代码嵌入到可执行的shell或→脚本中。但这是一个粗俗的黑客攻击,很快就会变得笨拙。)

上面链接的脚本有一些限制:

  • 在运行LilyPond之前,它不会检查您是否保存了文档。如果在运行LilyPond之前让TextWrangler自动保存就好了。
  • 它不能接受文本片段或未保存的文档作为输入,只能接受已保存的文档。

您可以通过求助于AppleScript来制作更复杂的解决方案来解决这些问题。执行此操作的两种方法:

中提取的

  • 创建一个Mac服务,这可能是一个几乎可以在任何文本编辑器中重用的方法。这是我们在NeXT时代用来编译通用音乐文件的方式,所以我可以证明它的优雅。我没有一个很好的最新例子,unfortunately.
票数 1
EN

Stack Overflow用户

发布于 2011-09-26 18:14:54

问得好。如果你这样做,它实际上在我的系统上运行Lilypond:

代码语言:javascript
复制
#!/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1

…但是失败了,因为#不是行注释字符,所以Lilypond尝试解析该行。

由于TextWrangler找不到‘shebang’行,所以用块注释将其括起来失败。

代码语言:javascript
复制
%{
#!/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1
%}

另一种方法是使用Smultron 3,它允许您定义可通过键盘快捷键运行的commands

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6791331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档