[ruby-dev:47256] Re: Etc.passwd の挙動について

From: fujioka <fuj@...>
Date: 2013-04-12 15:00:40 UTC
List: ruby-dev #47256
藤岡です。

IRCで中田さんにEtc::Passwdを使えと言われてしまい、
こっちにビックリじゃない仕様のものがありました。

これを使うことにします。
Etcのモジュールのほうはあまり使わないことにしておきます。

(2013/04/12 23:39), fujioka wrote:
> xibbarこと藤岡です。
> 
> Etc.passwd を使ってみて、面食らったので要望を出しておきます。
> 現状は、
> 
> irb(main):028:0* Etc.passwd
> => #<struct Struct::Passwd name="_calendar", passwd="*", uid=93, gid=93,
> gecos="Calendar", dir="/var/empty", shell="/usr/bin/false", change=0,
> uclass="", expire=0>
> 
> irb(main):029:0> Etc.passwd
> => #<struct Struct::Passwd name="_ces", passwd="*", uid=32, gid=32,
> gecos="Certificate Enrollment Service", dir="/var/empty",
> shell="/usr/bin/false", change=0, uclass="", expire=0>
> 
> って感じで、/etc/passwd を1行ずつ読み込んで、
> Structで返す仕様になっています。
> ブロックを与えると、
> 
> irb(main):034:0* Etc.passwd{|pw|p pw}
> #<struct Struct::Passwd name="_amavisd", passwd="*", uid=83, gid=83,
> gecos="AMaViS Daemon", dir="/var/virusmails", shell="/usr/bin/false",
> change=0, uclass="", expire=0>
> #<struct Struct::Passwd name="_appleevents", passwd="*", uid=55, gid=55,
> gecos="AppleEvents Daemon", dir="/var/empty", shell="/usr/bin/false",
> change=0, uclass="", expire=0>
> 
> って感じで、1行ずつ読み込んで何かできる様になっています。
> これが、Ruby的には
> Etc.passwd.each{|pw|p pw}
> とかってやれたほうが驚きが少ないと思ったのですが
> いかがでしょうか。
> 少なくとも Etc.passwd で1行ずつ読みだしたStructが返ってくるよりも
> いいかなと思います。
> 
> Etc.passwd.to_a とか出来たほうがいいのではないかと思います。
> 現状、StructのArrayを作る方法もなくて、
> pw_ary=[]
> Etc.passwd{|pw|pw_ary << pw}
> とかやらなきゃならないです。
> 
> どういう仕様にしたらスマートかというあたりまでは
> 踏み込めていませんが、とりあえず面食らったので
> 不満を書いてみました。
> 
> よろしくお願いします。
> 


In This Thread