groovysh で任意の文字コードでロードする

Groovy では groovy.source.encoding オプションでデフォルトの文字コードを指定できる。
これを groovysh でも利用するようにしてみた。

src に含まれている org.codehaus.groovy.tools.shell.commands.LoadCommand.groovy を用意する。
load メソッドを以下のように修正する。

    void load(final URL url) {
        assert url != null

        if (io.verbose) {
            io.out.println("Loading: $url")
        }
        def charset = System.getProperty("groovy.source.encoding") ?:
                      System.getProperty("file.encoding") ?:
                      java.nio.charset.Charset.defaultCharset().name()
        url.eachLine(charset) {
            shell << it
        }
    }

GROOVY_HOME/command を作成し、修正した LoadCommand.groovy を置き、groovyc でコンパイルする。
GROOVY_HOME/conf/groovy-starter.conf のパスに command を加える。*1

    # load command
    load !{groovy.home}/command

    # load required libraries
    load !{groovy.home}/lib/*.jar

    # load user specific libraries
    load !{user.home}/.groovy/lib/*.jar
    
    # tools.jar for ant tasks
    load ${tools.jar}

これで Windowsコマンドプロンプトでも UTF-8スクリプトを利用できる。
groovysh は commands.xml を編集すれば新規のコマンドも追加できるようだ。

*1:優先順なので先頭に加える