GMT4 → GMT5

GMT5相對於GMT4有很多功能上的更新以及語法上的改進。最大的變化在於,GMT5中所有GMT命令必須以 gmt 開頭。

GMT4中使用 psbasemap 命令繪製底圖、使用 pscoast 繪製海岸線。 psbasemappscoast 都是GMT4提供的命令,每個命令均對應一個可執行文件。GMT4總共提供了上百個命令,這帶來一個命名空間污染(namespace pollution)的問題。即不同的軟體提供了相同名字的命令,導致不同命令之間出現衝突,使得用戶難以確認自己執行的 pscoast 命令是由GMT提供的還是其它軟體包提供的。

爲了解決這個問題,GMT5對源碼做了大量改寫。GMT5中只提供 gmt 這一個命令/可執行文件。GMT4中的所有命令在GMT5中都變成了 gmt 命令的模塊。所有模塊都以 gmt module options 的形式進行調用。例如,GMT4中的命令 psbasemap 在GMT5中應寫爲 gmt psbasemap

因而,將GMT4腳本遷移到GMT5下,只需要遵循如下步驟:

  1. 將所有GMT4命令前加上 gmt,即 psbasemap 改成 gmt psbasemap
  2. 保存並執行腳本。若出現報錯,則找到最早的報錯信息並查詢當前GMT版本對應的文件,檢查是否語法存在變化,並進一步更正。

GMT提供了腳本 gmt5syntax,可以自動在GMT4命令前加上 gmt,該腳本位於 GMT的 share/tools 目錄下。該腳本的使用方法也很簡單:

gmt5syntax old_script.sh > new_script.sh

如果不願意修改原腳本,GMT還爲舊命令提供了軟鏈接,使得依然可以直接使用 psbasemap 等命令,但極其不推薦這一方法。爲舊命令生成軟鏈接有多種方法,用戶可任選其一即可:

  1. 如果你是自行編譯GMT源碼並安裝,則可以在 cmake/ConfigUser.cmake 中加上 set (GMT_INSTALL_MODULE_LINKS TRUE) 再進行編譯安裝

  2. 對於已經安裝GMT的用戶,可以執行:

    $(gmt --show-sharedir)/tools/gmt_links.sh create
    

    該腳本會自動爲所有舊命令創建軟鏈接。

  3. 對於Bash用戶,可以直接在Bash腳本、終端或者Bash配置文件中加入如下語句:

    source $(gmt --show-sharedir)/tools/gmt_functions.sh
    

    該腳本會爲所有舊命令構建一個等效的bash函數。

  4. 對於csh用戶,可以直接在csh腳本、終端或者csh配置文件中加入如下語句:

    source `gmt --show-sharedir`/tools/gmt_aliases.csh
    

    該腳本會爲所有舊命令構建一個等效的csh別名。