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



Ruby新手,我试图在erb文件中列出系统用户(在一行,逗号分隔),代码如下:

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

但它不是用逗号连接的,只是不带空格地连续粘贴数组中的字符串。如果我在联接中去掉(","),则会得到相同的结果。

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

<%= IO.readlines('/etc/passwd').reject {|l| l.start_with?('#')}.map {|l| l.split(':')[0]}.join(',') %>

这是可怕的丑陋,但工作。

此行users = user.split.join(",")试图拆分user,这是一个只有当前迭代的用户名的字符串。因为您在每次迭代中都要编写users的内容(它只是该迭代中的user),所以它只是添加了一个空格。(join使用单个字符串意味着该字符永远不会被引入。)

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

最新更新