GoogleMapsのマイプレイスを書き出したkmlファイルをgpsbabelでマージして一つのgpxファイルにしようとした。inputファイルはそれぞれ前に-fを付けなければならないようだ。そこでシェルスクリプト化。
#!/usr/bin/zsh inputs="" for I; do inputs="${inputs} -f \"${I}\" " done gpsbabel -i kml $inputs -o gpx -F tmp.gpx
出来上がったコマンドラインを確認。
#!/usr/bin/zsh inputs="" for I; do inputs="${inputs} -f \"${I}\" " done echo gpsbabel -i kml $inputs -o gpx -F tmp.gpx
想定通りのコマンドラインが形成されとるし、そのコマンドラインをコピー&ペーストして実行するとちゃんと動く。なんでや。なんかシェルスクリプトのお作法があるんか?
「シェル 変数 実行」で検索してみた。
qiita.com
ほう、実行させるコマンドにスペースがあるとうまく行かないのでevalで実行すると。
#!/usr/bin/zsh inputs="" for I; do inputs="${inputs} -f ${I} " done eval "gpsbabel -i kml $inputs -o gpx -F tmp.gpx"
できた。成功したときにはなにもメッセージを残さないのでスクリーンショット省略。
set -xは実行時に内容を表示するオプションとな。最初のスクリプトの最初にset -xを加えて実行してみた。
シングルクォテーション付きで渡されてたってことか。でもなぜ文字化けするん?