Mac Automator(OS 10.7)没有阅读Ruby 1.9.3?

时间:2013-05-02 17:35:42

标签: ruby-1.9.3 automator

我在.rb文件中有一些Ruby代码,我试图使用Automator而不是命令行运行。以下是代码示例(文件名为“filelines_revise.rb”):

lines = IO.readlines('filelines_before_CAP.txt').map do |line|

  array = line.split.each { |i| i.capitalize! }

  if array.include?("Ws")
    array.delete("Ws")
    array[-1,0] = "Ws"
  end

  if array.include?("Es")
    array.delete("Es")
    array[-1,0] = "Es"
  end

  array_2 = array.join(" ")

  array_2.gsub(/ Ws /, ", west side")
         .gsub(/ ES /, ", east side")
end

File.open('filelines_after_CAP.txt', 'w') do |file|
  file.puts lines
end

当我使用命令行命令“ruby /Desktop/filelines_revise/filelines_revise.rb”运行此代码时,代码运行正常。它找到原始.txt文件,读取每一行,按照代码指示更改文件,然后创建一个带有修订行的新文件。

当我尝试将它作为工作流或应用程序放入Automator时,我将Run Shell Script放入我的流程,使用/ bin / bash和Pass输入:到stdin,然后命令“ruby / Desktop / filelines_revise /filelines_revise.rb”。当我去运行脚本时,我得到一个错误:

Desktop / filelines_revise / filelines_revise.rb:18语法错误,意外'。',期待Kend

第18行是上面代码中列出的第二个.gsub“.gsub(/ ES /,”,east side“)”。

Automator是否有可能不像命令行那样使用我的Ruby 1.9.3?也许我应该以不同的方式解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的Ruby版本如何确定?我敢打赌Automator对此一无所知。它可能正在运行内置的Ruby 1.8.7。您可以通过在脚本过程中检查RUBY_VERSION来轻松检查。

问题是双击(如Automator)的shell环境与终端的shell环境(使用.bash_profile)不同。

顺便说一句,BBEdit在版本10.5之前遇到了同样的问题。双击应用程序需要特别努力才能获得终端shell环境,而且大多数应用程序都没有这么做。

编辑:我看了一下Automator,发现如果你运行一个shell脚本,你用Run Shell Script操作字面输入,你必须将弹出窗口切换到/usr/bin/ruby。但当然我的红宝石不是 /usr/bin/ruby的红宝石。 /usr/bin/ruby是1.8.7;这是我想要使用的红宝石。你不能提供一个shebang线!

所以我将弹出窗口设置为/bin/bash/并运行此脚本:

/usr/bin/env ruby /Users/matt/Desktop/test.rb

test.rb在哪里读取:

puts RUBY_VERSION

在Automator中运行,我仍然得到“1.8.7”。我也尝试过它作为应用程序和服务;同样的结果。所以我认为除了内置的ruby 1.8.7之外,你不能让Automator使用任何东西而不直接指向你想要的红宝石;它不会像终端那样从shell中捡起它。