便利な便利なopenコマンド
皆さんはopenコマンドは知っているだろうか?
MacOSを使用している人は今すぐterminal.appを開いてopenコマンドを試してみてほしい.
$ open .
するとFinderが開くはずだ.このときに渡したパスをFinderが開いてくれる.
また,指定し たパスがファイルならばそのファイルを開くために設定されている規定のアプリケーションを使って開いてくれる.
たとえば$ open ./index.html
ならば,safariやchromeでHTMLファイルが表示される.
ちょっとファイルを開いて確認したいときや,ディレクトリの構造をGUIでサクッと確認したいときに使える.
これがすごく便利であることは言うまでもない.
Windowsを使用している人は,コマンドプロンプトにおけるstart
コマンドが似たようなことをしてくれる.
ただし,普段の開発をWSLで行なっている人にとってはopen
やstart
がサクッと使えないのだ.
コマンドプロンプトを経由してopenを実行する
Windowsを普段から使っている人にとっては,WSLから*.exe
を実行できることは周知の事実だろう.
たとえば,WSLからコマンドプロンプトを起動したいときには$ cmd.exe
と実行すればいい.
これを応用してstart
コマンドを実行すれば,WSL上でstart
コマンドが実行できる.
$ cmd.exe /c start .
## コマンドプロンプトを一時的に開き,startコマンドを実行できる.
しかし,このままではWindowsとWSLのパスの表現方法の違いを看過できない.
コマンドプロンプトではパスの区切りを\
または¥
にて表記するが,WSLでは/
と表記する.
そのため,このまま素直に実行してもうまくいかない.
このパス問題を解決するために,WSLにはwslpath
という便利なコマンドが 用意されている.
たとえば,WSL上にて以下のコマンドを実行すれば,WSL上のパスをWindowsから見たパスに変換して表示してくれる.
$ wslpath -w .
## \\wsl$\Ubuntu-20.04\home\...
このコマンドを活用すれば,パス問題を解決することができる.
$ cmd.exe /c start $(wslpath -w .)
## カレントディテクトリがエクスプローラで開く.
あとはこれを関数として登録すればOK.
function open() { cmd.exe /c start $(wslpath -w $1) }
## これで完了だが,このままだとWSLを起動するごとに
## 上記定義を実行する必要が生じるので,
## .bashrcや.bash_profileに記述しておくとGood
これで無事にWSLでもopen
コマンドが使えるようになった.
非常に便利なコマンドなので,作成しておいて損はないだろう.
特にWeb家の人は重宝するだろう.