我正在尝试理解
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一样,但管道在这里做什么?
解决方法
这是一个字符串.在ruby中,您可以通过各种方式定义字符串.单引号或双引号是最常见的,%s是另一种.您还可以使用此脚本中使用的任何分隔符定义字符串.例如,%^也是字符串^,或%$也是字符串$.您只需确保不在字符串中使用这些字符.
<<<在这种情况下,它被用作连接操作,将字符串附加到文件,或者在这种情况下,是一个侦听AppleScript的管道.