我想将一组选定的行发送到我当前的ipython窗口,这是来自texteditor(在这种情况下是It的TextMate,但这很不相关。)该脚本使用bash调用,因此它可以接受变量,然后接受Applescript调用,将代码推送到窗口。
此当前脚本有效,但它一次只能发送一个非嵌套行。有没有办法解决这个问题,所以我可以一次发送多个非嵌套的代码行?
var usingUnion = db.Where(x => x.IsValid)
.OrderBy(x => x.Count)
.Union(db.Where(x => x.IsValid == false).OrderBy(x => x.CreateDate))
.ToList();
答案 0 :(得分:1)
我自己不使用TM或ipython,因此无法立即回答您的确切问题,但以下是关于从终端调用AppleScript的一般想法:
永远不要将参数传递给AS:这是一个等待发生的错误引用事故。将您的AS代码包装在on run argv ... end run
处理程序中,然后在bash中调用它时将额外的参数附加到osascript
命令。然后,osascript
将这些参数直接传递给AppleScript,作为分配给argv
变量的字符串列表。安全而简单。
不要将AS代码包装在bash脚本中,只需在AS代码的顶部添加#!/usr/bin/osascript
,将其作为纯文本文件保存在适当的位置(例如shell上的某个地方&# 39; s $PATH
,例如/usr/local/bin
),然后执行chmod +x /path/to/script
以使其可执行。这将允许您直接从终端运行它。
如果要直接在基于AppleScript的shell脚本中访问STDIN或环境变量,请使用AppleScript-ObjC桥分别分别调用NSFileHandle's fileHandleWithStandardInput()'s readDataToEndOfFile()
和NSProcessInfo's processInfo()'s environment()
。要访问ARGV,请使用如上所述的显式run
处理程序。
默认情况下,osascript
会自动将run
处理程序返回的值写入STDOUT;或者,您可以随时通过NSFileHandler
直接写入STDOUT(您可以在return
处理程序的末尾放置一个普通的run
语句,以确保它不返回任何其他内容。并且osascript
自动将log
命令的结果写入STDERR,并在脚本抛出未捕获的异常时将返回代码设置为非零(例如,使用error ERROR_STRING number ERROR_NUMBER
语句引发异常直接在您的AS代码中。
(顺便说一下,我不久前写了一个文件库,其中包含一堆非常好的处理程序,用于编写基于AS的shell脚本。我不再自己开发或支持它;但是,各种人都有already forked it,因此,如果你做了很多AS + shell工作,你可能会发现它是一个有用的AS代码来源,可以剪切和粘贴甚至按原样使用。)