Windows版のGMT-5(最新版はGMT-5.4.2)はダブルクリックで簡単にインストールすることができます.WSL (Ubuntu 16.04)ではGMT-5.4.2のBuildがうまくいかず(後に成功しました.こちらの記事参照),aptで入るGMT-5.2.1を使っていますが(こちらの記事参照),Windows版でしたら,最新版を難なく利用可能です.一方,Windowsコマンドプロンプトのスクリプトはbashのスクリプトと互換性がなく,bashの方が情報量や機能面で圧倒的に勝っていると思われます.Windows 10ではWSLという画期的な機能が追加されました.この機能の一つに「bashからWindowsの実行形式が実行可能」というものがあります.ただし,この場合は拡張子exeが省略できません(拡張子exeの有無でWindowsかLinuxかを判定しているものと思われます).これを使えば,WSLのbash scriptでWindows版のGMTが呼び出し可能となります.

コマンドgmtを使い分ける

Linux版のGMTのコマンドは

$ gmt pscoast

のように,gmtを付けて呼ぶことができます.Windows版でも同様ですが,WSLのbashでは拡張子exeが省略できないので,

$ gmt.exe pscoast

のように呼びます.ただし,pscoastの方には拡張子exeを付けません.
よって,変数$gmtをWindows版とLinux版でそれぞれgmtおよびgmt.exeに設定すればよいことになります.

フォルダ(ディレクトリ)構造の違いを吸収する

WSLを利用する場合も,基本的にWindowsのフォルダで作業することを想定しますと,WSLとWindowsでフォルダ(ディレクトリ)構造が異なることに注意が必要です.例えば,WindowsのCドライブはWSLでは「/mnt/c」にマウントされます.一方,Windows版のGMTはWindowsのフォルダ構造のまま理解しますので,CドライブはCドライブのままで,これをbashから利用できるようにするには,「c:」とする(最初の/なし,コロンが必要)必要があります.

bashスクリプトの例

以上に留意すると,bash scriptで以下のようにすれば実現できます.

gmt_system=linux  # デフォルトはLinux版としておきます
### コマンドライン第1引数がwindowsの場合にWindows版を利用するよう設定します
if [ "$1" = "windows" ] ; then
  gmt_system=windows ; shift
fi
if [ "${gmt_system}" = "windows" ] ; then  # Windows版を利用する場合
  c_dir="c:"  # Windows版を利用するときのCドライブのpathをc_dirに入れます
  gmt="gmt.exe"  # Windows版を利用するときは拡張子exeが必要です
  echo -n Windows GMT-; $(echo $gmt --version)  # Windows版であることを表示します
else  # Linux版を利用する場合
  c_dir="/mnt/c"  # Linux版を利用するときのCドライブのpathをc_dirに入れます
  gmt="gmt"  # Linux版ではgmtに拡張子を付けません
  echo -n Linux GMT-; $(echo $gmt --version)  # Linux版であることを表示します
fi
### 以降はWindows版かLinux版かを気にすることなく,bash scriptを書いていきます
### psxyを呼ぶ例です.変数rxy,proj,polygon,psが別途定義済みと仮定しています
$gmt psxy ${c_dir}/dat/data.xyz -R${rxy} -J${proj} -G${polygon} -P -K  >${ps}
...

これまではVMware上でLinuxをインストールし,GMTを利用していましたが,WSLを利用する場合はbashの窓が瞬時に開くため,ストレス無く,Windowsネイティブの機能であるかのように使えます.革命的です.