我正在尝试使用ERB模板动态创建文件系统的挂载点列表,以便Nagios监视磁盘使用情况。我无法弄清楚ERB的确切语法,我让它直接在Ruby中工作。
以下是我为ERB所尝试的内容
<% @str = `df -h`; @str.scan(/\/[\w\/]+$/){|m| -%><%= -p @m %><% unless m.match(/\/dev|\/proc/)};puts %>
这是我的代码,以及在Ruby CLI中工作的所需输出:
ruby -e '
str = `df -h`
str.scan(/\/[\w\/]+$/){|m| print "-p #{m} " unless m.match(/\/dev|\/proc/)};puts'
-p /net -p /home -p /Network/Servers <-- Output
答案 0 :(得分:1)
首先,您不需要在模板中运行。你可能有一些ruby代码推出模板(如Rails控制器或Sinatra类)。您可以将代码放在那里,并将输出存储在模板中显示(例如假设为rails)。
其次,你不想使用print或puts (因为那些会输出到终端而不是模板),而是将输出存储在变量中。
控制器:
class MountPointsController < ApplicationController
def index
@output = ""
str = `df -h`
str.scan(/\/[\w\/]+$/){|m| output << "-p #{m} " unless m.match(/\/dev|\/proc/)};output << "\n"
end
end
模板就这么简单(注意'&lt;%='表示“在模板中输出结果):
<%= @output %>
即使我建议反对,这里有一个包含模板中所有代码的示例:
<% @output = "" %>
<% str = `df -h` %>
<% str.scan(/\/[\w\/]+$/){|m| output << "-p #{m} " unless m.match(/\/dev|\/proc/)};output << "\n" %>
<%= @output %>