R.Takakura
Portfolio Site

WSLでもopenコマンドを使えるようにする

open

便利な便利なopenコマンド

皆さんはopenコマンドは知っているだろうか?
MacOSを使用している人は今すぐterminal.appを開いてopenコマンドを試してみてほしい.

bash
$ open .

するとFinderが開くはずだ.このときに渡したパスをFinderが開いてくれる. また,指定したパスがファイルならばそのファイルを開くために設定されている規定のアプリケーションを使って開いてくれる. たとえば$ open ./index.htmlならば,safariやchromeでHTMLファイルが表示される. ちょっとファイルを開いて確認したいときや,ディレクトリの構造をGUIでサクッと確認したいときに使える. これがすごく便利であることは言うまでもない.

Windowsを使用している人は,コマンドプロンプトにおけるstartコマンドが似たようなことをしてくれる. ただし,普段の開発をWSLで行なっている人にとってはopenstartがサクッと使えないのだ.

コマンドプロンプトを経由してopenを実行する

Windowsを普段から使っている人にとっては,WSLから*.exeを実行できることは周知の事実だろう. たとえば,WSLからコマンドプロンプトを起動したいときには$ cmd.exeと実行すればいい. これを応用してstartコマンドを実行すれば,WSL上でstartコマンドが実行できる.

WSL
$ cmd.exe /c start .
## コマンドプロンプトを一時的に開き,startコマンドを実行できる.

しかし,このままではWindowsとWSLのパスの表現方法の違いを看過できない. コマンドプロンプトではパスの区切りを\またはにて表記するが,WSLでは/と表記する. そのため,このまま素直に実行してもうまくいかない.

このパス問題を解決するために,WSLにはwslpathという便利なコマンドが用意されている. たとえば,WSL上にて以下のコマンドを実行すれば,WSL上のパスをWindowsから見たパスに変換して表示してくれる.

WSL
$ wslpath -w .
## \\wsl$\Ubuntu-20.04\home\...

このコマンドを活用すれば,パス問題を解決することができる.

WSL
$ cmd.exe /c start $(wslpath -w .)
## カレントディテクトリがエクスプローラで開く.

あとはこれを関数として登録すればOK.

WSL
function open() { cmd.exe /c start $(wslpath -w $1) }
## これで完了だが,このままだとWSLを起動するごとに
## 上記定義を実行する必要が生じるので,
## .bashrcや.bash_profileに記述しておくとGood

これで無事にWSLでもopenコマンドが使えるようになった. 非常に便利なコマンドなので,作成しておいて損はないだろう. 特にWeb家の人は重宝するだろう.

Modified: 2020-06-27.
Created by Rei Takakura & All rights reserved.
This website uses Google Analytics to analyze the user behavior.