Chef - 在erb模板文件中无法识别的连接方法分隔符

时间:2016-07-19 21:09:11

标签: ruby chef

Ruby新手,我正在尝试使用以下代码列出erb文件中的系统用户(在一行上,以逗号分隔):

<% IO.readlines("/etc/passwd").each do |pwd| %><% user = pwd.split(":").first %><% users = user.split.join(",") %><%= users %><% end %>

但它没有加入逗号,只是连续地从数组中粘贴字符串而没有空格。如果我离开(“,”)离开连接,结果相同。

知道出了什么问题,或者更好的方法吗?

1 个答案:

答案 0 :(得分:2)

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ #Specified value#                                        ┃ #Computed value# ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ inline-table                                             │ table            │
├──────────────────────────────────────────────────────────┼──────────────────┤
│ inline, table-row-group, table-column, table-column-group│ block            │
│ table-header-group, table-footer-group, table-row        │                  │
│ table-cell, table-caption, inline-block                  │                  │
├──────────────────────────────────────────────────────────┼──────────────────┤
│ others                                                   │ same as specified│
└──────────────────────────────────────────────────────────┴──────────────────┘

这很丑陋,但很有效。

此行<%= IO.readlines('/etc/passwd').reject {|l| l.start_with?('#')}.map {|l| l.split(':')[0]}.join(',') %> 正在尝试拆分users = user.split.join(","),这是一个只包含当前迭代用户名的字符串。并且因为您在每次迭代中编写user(来自该迭代只是users)的内容,所以它只是在没有空格的情况下附加。 (user单个字符串表示该字符永远不会被引入。)

对于这样的代码,特别是因为它既不需要Chef的环境也不需要ERB,通过将它放在自己的脚本文件中或使用join运行然后添加{{1},可以更容易地看到它在做什么。要调试的行。