我在.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?也许我应该以不同的方式解决这个问题?提前谢谢。
答案 0 :(得分:0)
您的Ruby版本如何确定?我敢打赌Automator对此一无所知。它可能正在运行内置的Ruby 1.8.7。您可以通过在脚本过程中检查RUBY_VERSION
来轻松检查。
问题是双击(如Automator)的shell环境与终端的shell环境(使用.bash_profile
)不同。
/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中捡起它。