質問: 最近、Windows機に"Windows subsystem for linux"を入れました。linuxですとさまざまなアプリ(Google ChromeやThunderbird)をbashの画面からコマンドを打つだけで実行できたと思うのですが、WSLでも同様なことができるのでしょうか? つまり、WSLのbashから`$ thunderbird`などと打ってwindwows内に存在するthunderbirdを起動することなどはできますでしょうか? よろしくお願いします。
回答: デフォルトでは、Windows環境でPATHが通っていればできます。なお、PATHが通っているとは、環境変数PATHにそのアプリまでのフォルダーのパスが記載されていると言うこととです。 コマンドプロンプトでは`notepad.exe`と打つとメモ帳が起動します。それと同じく、WSLのbashでも`notepad.exe`と打つとメモ帳が起動します。ただ、逆に言うと、PATHが取っていなければ動きません。つまり、コマンドプロンプトで`thunderbird.exe`と打ってThunderbirdが起動できるような状態でなければ、bashでも起動しません。 なお、コマンドプロンプトでは`notepad`と拡張子".exe"を省略することができますが、bashでは省略せずに、".exe"を含めて書かなくてはいけません。コマンドプロンプトには実行ファイルの拡張子を補完する機能(拡張子PATHEXTで設定されている)がありますが、bashにはないからです。 通常、ThunderbirdなどのアプリはインストールしてもPATHを通しません。スタートメニューやデスクトップにあるショートカットを使うというのがWindowsの文化であり、コマンドプロンプト等から起動するという習慣がないからです。PATHがなければ、Windowsは実行すべきexeファイルがどこにあるのかというのを知ることができません。ですので、`thunderbird.exe`と打っても実行すべきexeファイルがどこにあるのかわからないのです。もし、そのようなアプリをコマンドで起動したい場合は、環境変数PATHを手動で追加する必要があります。 まとめますと * コマンドプロンプトから起動できるなら、bashでも起動できる。 * コマンドプロンプトから起動できないなら、bashでも起動できない。 * コマンドプロンプトで起動できるかどうかは、PATHが通っているか、つまり、環境変数PATHにパスが存在するかどうかによって決まる。 * bashでは拡張子を省略せずに".exe"(バッチなどであれば".bat"等)を含めたファイル名を書く必要がある。(コマンドプロンプトでは省略可能) なお、bash上で独自に`thunderbird`へPATHを通すようにすればbashだけ起動することができます。また、特定のレジストリ値を設定することで、コマンドプロンプトで設定されるWindowsの環境PATHをbashで引き継がないようにすることもでき、その場合は、bash上でPATHを設定しないと、Windows関係のコマンドは一切使えません。