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
行进行调试,可以更容易地看到它在做什么。