curl https://api.github.com/users/kaosf/repos?per_page=100 2> /dev/null | ruby -rjson -e 'JSON.parse(STDIN.read).each{|r|puts r["name"]}'
curl と Ruby を使います.
curl で GitHub の API を叩いて JSON 形式の出力を受け取り,それを Ruby に渡して JSON ライブラリにパースしてもらって出力する,というワンライナーです.
試す場合は kaosf
の部分を自分の GitHub アカウントのユーザ名に変更しましょう.
デフォルトだと 30 件ずつしか取得出来ないので per_page
オプションで無理矢理拡大してます.
なおこれでは public なリポジトリしか取れません (当然).private リポジトリも取得したいなら認証をアレコレするといいんじゃないかと (よく知らない).
ShellScript Tips
2> /dev/null
はリダイレクションと「Linux は何でもファイルだよ文化」の組み合わせ技です.
curl コマンドを使うと,標準エラー出力に通信に関する情報が出力されます.今はそんな情報は不要で見たくないので何処かに捨てたいですね.ではどうやって捨てるかというと,「何もない」を「0 個ある」と表現する感覚で,「出力を捨てる」には「null デバイスに出力する」と良いのです.
Linux ではデバイスもファイルとして扱われるので /dev/null
なんてのがファイルとしてあるように見えるわけです./dev/null
の場所とか名前とかはディストリビューションによって違うとか聞いたような気もしますけど Ubuntu ではここです.
Ruby Tips
Ruby の引数 -rjson
は require 'json'
と同じ効果をもたらします.
-e 'unkunk'
は unkunk
と書かれたファイルを引数に与えているのと同じ効果をもたらします.
なので ruby -rjson -e 'unkunk'
は
require 'json'
unkunk
というファイルを用意してそれを使って
ruby sample.rb
としてるのと一緒です!今回程度の短いスクリプトならそもそもファイルを作って管理する方が面倒くさいですからね><
References
余談
ていうかこのくらいのことデフォルトで出来る CLI ツールないですか><