Bash on Ubuntu on Windowsにより、Windowsでもネイティブ環境でbashを使えるようになりました。
今後、シェルスクリプトでTera Termマクロを実行させる機会が増えるのでは?と思っています。
Bash on Ubuntu on Windowsとは?
Ubuntuの環境が、すべてではないにしろWindowsで動くようになります。仮想環境ではなくて、Windows上でネイティブに動きます。これまでUnix環境を求めてMacやLinuxを使ったりCygwinをインストールしていたWindowsユーザーには朗報かと思います。ぼくもUnix環境を求めてWindowsとMacを併用していましたが、これからは愛用のLet’s noteでTera Termを使いつつ、必要に応じてLinuxコマンドを使える環境になり、かなり作業効率が増すのではないのか?と感じております。
コマンドラインからTera Termマクロを呼び出す
bashから直接「.exe」ファイルを呼び出せるようになりました。Tera Termマクロ(ttpmacro.exe)は次のようにして呼び出します。
/mnt/c/Program\ Files\ \(x86\)/teraterm/ttpmacro.exe
このコマンドを実行すると実行するTera Termマクロファイルを開くためのダイアログボックスが表示されるはずです。もしも「そのようなファイルやディレクトリはありません」と表示されたら別の場所にインストールされています。インストール場所が判らなければ、次のようにして探すことができます。
find / -type f -name ttpmacro.exe 2>/dev/null
bashだけど実行しているのはWindows環境
お好きなエディタで次のようなマクロを作成して、ホームディレクトに「hello.ttl」として保存するとします。
messagebox ‘hello bash’ ‘hello bash’
このマクロは次のようにして実行できそうな気がします。
/mnt/c/Program\ Files\ \(x86\)/teraterm/ttpmacro.exe hello.ttl
2017年4月25日現在では上記のコマンドを実行できません。hello.ttlを見つけられずエラーになります。では次のコマンドでは?
/mnt/c/Program\ Files\ \(x86\)/teraterm/ttpmacro.exe $(pwd)/hello.ttl
残念ですが、上記のコマンドも2017年4月25日現在では実行できません。ちなみに「$(pwd)」はbashのコマンド展開結果が入ります。pwdは現在のディレクトリを表示するコマンドなので、結果としてフルパスでマクロファイル名を引数に指定していますが、マクロは実行されません。
どうすれば実行出来るのかというと、次のようにします。
/mnt/c/Program\ Files\ \(x86\)/teraterm/ttpmacro.exe ‘C:\Users\foo\hello.ttl’
わかりますか。ドライブ名からフルパスで指定する必要があります。併せてシングルクォート「’」で括ってやる必要もあります(もしくは「”」)。「/」から始まるフルパスでは実行出来ないので注意してください。
この辺りは今後のアップデートで変わる可能性もあります。
戻り値について
Bashから直接、もしくはシェルスクリプトからTera Termマクロを呼び出す場合、今のところ(2017年4月25日)、マクロがシンタックスエラーで終了したりsshのログインエラーで終了しても戻り値は「0」となり、正常終了したときと変わりません。
たとえば、自動的にsshログインするための「ssh.ttl」を用意して実行し、戻り値を表示させる以下の様なシェルスクリプトを実行すると、戻り値は常に「0」となります。
#!/bin/sh /mnt/c/Program\ Files\ \(x86\)/teraterm/ttpmacro.exe 'C:\Users\foo\ssh.ttl' echo $?
Tera Termマクロはsetexitcodeで戻り値を指定できますが、シンタックスエラーやsshログインエラーの場合、エラーを示すメッセージボックスが表示されてsetexitcodeを実行する前にマクロが終了します。
sshログインが失敗した時にメッセージボックスを表示させないような機能が欲しい旨の要望は過去に出していますが、これといった反応はありません。sshログインが失敗した際に戻り値で処理を分岐させるといった事は、現状では難しいかも知れません。
せめて、エラー終了時はTera Term側で終了コードを設定してくれると良いのですが。