Embulk.batのハックについて

  • WindowsでEmbulkを使う場合はJavaをインストールした上で、Quick startにあるように以下のコマンドでファイルをダウンロードしたものを実行する
> PowerShell -Command "& {Invoke-WebRequest http://dl.embulk.org/embulk-latest.jar -OutFile embulk.bat}"
  • このバッチファイル、embulkのjarパッケージはどこにいってしまったのだろうかと調べてみると、こちらのエントリに行き着いた

hito4-t.hatenablog.com

  • このエントリによると、
つまり、元のJARファイルの先頭にselfrun.shの中身をくっつけているようだ。
このファイルはbatファイルとしても実行できるし、JARファイルとしても認識されるようだ
  • 確かにこのファイルの後半はバイナリデータとなっている

  • それからこのバッチファイル、コマンドラインだけでなくcygwinでも実行できてしまうしどうなっているのか、とこのバッチファイルの中身を見てみると、何やらバッチスクリプトシェルスクリプトが混在しているようで、調べてみるとこちらのエントリに行き着いた

d.hatena.ne.jp

  • cmd.exeでは、 : << BAT の行をgotoラベルとして解釈するが今回は使わないので実質的にはコメントと同等の扱いとなり、 : << BATの次の行からexit /bまでをバッチスクリプトとして実行し、その後に現れるシェルスクリプトは実行しない
  • 逆にshでは << BAT をヒアドキュメントの開始行として解釈して、BAT までをコメントとして解釈し、何もしないコマンド:によってそれが無視されるので、その後に現れるシェルスクリプトの方だけを実行する