WSLの機能は多岐にわたるので、今回はWindowsプログラムとの連携と、日本語処理の扱いについてのみ取り上げることにする。
β版の時は、WSLを利用するためにはbashのウィンドウを開いてLinuxコマンドを実行していた。だが現在のWSLでは、Windows OSの「コマンドプロンプト」上から直接特定のLinuxコマンドを指定して呼び出すことができるし、逆に、WSLのシェルから直接Windows OS側のコマンドを呼び出すこともできる。これにより、LinuxのコマンドとWindowsのコマンドをパイプで連結して連続実行させるといった処理が可能になっている。
最初は、Windows OSのコマンドプロンプトからLinuxのコマンドを呼び出す方法を見てみよう。
Linux側のコマンドを呼び出すためには、まずインストールされているディストリビューションの一覧を知る必要がある。
インストール済みのディストリビューションの一覧は、「wslconfig /list」コマンドで確認できる。そこに表示されている名前を使って、例えば「ubuntu」というコマンドを実行すると、Ubuntuディストリビューションのシェルを起動できる。単に「wsl」とだけ入力すると、一覧表示で「(既定)」となっているディストリビューションが起動できる(1つしかインストールしていない場合はそれが呼び出される)。
コマンドプロンプトからWSLのコマンドを呼び出すには、wslに続けて、Linuxのコマンド(とパラメーター)を指定する。すると、現在のカレントフォルダ(次の例ではC:\)が、WSL実行開始時のカレントディレクトリ(/mnt/c)に設定された状態でLinuxのコマンドが実行される(以下、全てUbuntu上での実行例)。
実行開始時のカレントディレクトリをユーザーのデフォルト(ホーム)にしたい場合は、「wsl ~ ls -lsa」のように、先頭に「wsl ~ 〜」を指定する。
デフォルト以外のディストリビューションで実行したい場合は、「ubuntu -c ls /etc」「opensuse-42 -c cat /etc/os-release」のように、ディストリビューション名(「wslcoinfig /list」で取得可能)と-cオプションを指定する。
次はWSL側からWindows OSのコマンドを呼び出してみよう。
Windows OSで利用できるコマンドは、もともとはUNIXにあったものをWindows OS向けにしたものが多い。そのため、単にコマンド名だけを入力すると、Windows OS側のコマンドか、WSL側(Linux側)のコマンドか判断がつかない。例えばsortやfindやmoreなどが相当する。また独立した実行プログラムではないが、「dir」のようなコマンド名もLinux側と衝突している。
この問題を解決するため、WSLからWindows OS側のコマンドを呼び出す場合は、次のようなルールを採用している。
以下に実行例を示す。
WSLを起動すると、Windows OS環境にあったPATH環境変数の値がWSL側にも引き継がれるようになっている。そのため、コマンドプロンプト上で起動できたコマンドは、フルパス指定にしなくても、そのままWSL側のbash上でも実行できる。
以上の機能を使うと、Windows OSのコマンドとLinuxのコマンドをパイプで接続して処理したり、リダイレクトでLinuxもしくはWindows OS上のファイルへアクセスしたりすることも可能である。
ちなみにWindowsのGUIのプログラムを呼び出すことも可能である(例「notepad.exe」を実行すればメモ帳を起動できる)。Linux環境からでも使い慣れたWindowsのGUIのエディタを起動できるので便利だ(ただし拡張子まで含めてプログラム名を指定しなければならないが面倒だが)。
Copyright© Digital Advantage Corp. All Rights Reserved.