我正在尝试理解this site上提供的脚本:
#!/usr/bin/env ruby
require ENV['TM_SUPPORT_PATH'] + '/lib/escape.rb'
def terminal_script_filepath
%|tell application "Terminal"
activate
do script "jsc -i #{e_as(e_sh(ENV['TM_FILEPATH']))}"
end tell|
end
open("|osascript", "w") { |io| io << terminal_script_filepath }
最重要的是,函数terminal_script_filepath
开头的部分:
%| …
… |
...以及在“解析”中的位置:
{ |io| io << terminal_script_filepath }
这里使用了哪些Ruby概念?
我知道带有管道的open()
可以帮助我将输入提供给流程的STDIN,但输入如何从terminal_script_filepath
传递到io
?我也知道basic %
operations with strings,如%w
,但管道在这做什么?
答案 0 :(得分:11)
这是一个字符串。在ruby中,您可以通过may方式定义字符串。单引号或双引号是最常见的,%s是另一种。您还可以使用此脚本中使用的任何分隔符定义字符串。例如%^Is also a string^
或%$Also a string$
。您只需确保不在字符串中使用这些字符。
在这种情况下,<<
被用作连接操作,将字符串附加到文件,或者在这种情况下,是一个侦听AppleScript的管道。
答案 1 :(得分:4)
这是字符串文字的另一个例子:
var = %|foobar|
var.class # => String
您可以使用任何单个非字母数字字符作为分隔符,如下所示:
var = %^foobar^
var.class # => String