Windows版GMT-5をWSL (Ubuntu)のbashから呼ぶ方法
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のコマンドは
[cc]
$ gmt pscoast
[/cc]
のように,gmtを付けて呼ぶことができます.Windows版でも同様ですが,WSLのbashでは拡張子exeが省略できないので,
[cc]
$ gmt.exe pscoast
[/cc]
のように呼びます.ただし,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で以下のようにすれば実現できます.
[cc]
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}
...
[/cc]
これまではVMware上でLinuxをインストールし,GMTを利用していましたが,WSLを利用する場合はbashの窓が瞬時に開くため,ストレス無く,Windowsネイティブの機能であるかのように使えます.革命的です.