かまたま日記3

プログラミングメイン、たまに日常

シェルの中でちょっと複雑なRubyスクリプトを実行する

シェルスクリプト内でURLのパースをしたかったんですが、さすがにシェルの機能だけでやるのが辛かったのでRubyでやろうかと思ったんですが、ワンライナーで書くのも辛いけど別ファイルに切り出すまでも無いって感じの内容だったので、悩んだ結果ヒアドキュメントを使って無理やりbashの中にねじ込みました。

#!/bin/sh

URL="http://kamatama41:pass@example.com:8080/hoge"
script=$( cat <<EOS
require 'json'
require 'uri'
uri = URI.parse("$URL")
puts JSON.generate({
  host: uri.host,
  port: uri.port,
  path: uri.path,
  username: uri.userinfo.split(/:/)[0],
  password: uri.userinfo.split(/:/)[1]
})
EOS
)

# {"host":"example.com","port":8080,"path":"/hoge","username":"kamatama41","password":"pass"}
echo `ruby -e "$script"`