結論
$ file=mydir/index.html && if type cmd.exe; then cmd.exe /c start ${file}; else open ${file}; fi
環境
- Windows 10 Pro 17133.1 (April 2018 Update)
- macOS High Sierra 10.13.4
以下「Windows Subsystem for Linux」を wsl と略します。
ファイルを開く方法
explorer.exe
にファイルを渡せば、そのファイルを開いてくれます。
$ explorer.exe index.html
Windows Subsystem for Linuxでない環境にも対応
Macではexplorer.exe
等は無く、代わりにopen
コマンドを使います。
$ open index.html
なので、type
コマンドでexplorer.exe
の有無を確認する必要があります。
こんなイメージです。
file=index.html
if type explorer.exe; then
explorer.exe ${file};
else
open ${file};
fi
ワンライナーにすると以下です。
$ file=index.html && if type explorer.exe; then explorer.exe ${file}; else open ${file}; fi
ファイルパスを変換する方法
上記の方法でファイル名を指定することができますが、ディレクトリ階層を含むパスは無効になってしまいます。ディレクトリ階層の区切り文字がWindowsとLinuxとで異なるためです。
wslにはwslpath
というコマンドがあり、wsl上のLinuxファイルパスをWindowsの形式に変換してくれます。
$ wslpath -w mydir/index.html #=> mydir\index.html
Windows Subsystem for Linuxでない環境にも対応
先程のif文の中にwslpath -w
を含めます。こんなイメージです。
file=mydir/index.html
if type explorer.exe; then
explorer.exe `wslpath -w ${file}`;
else
open ${file};
fi
ワンライナーにすると以下です。
$ file=mydir/index.html && if type explorer.exe; then explorer.exe `wslpath -w ${file}`; else open ${file}; fi
ただしここまで書いたあとに気付いたのですが、explorer.exe
ではなくcmd.exe /c start
を使えば、ファイルパスを変換してくれるためwslpath
は不要なようです。
参考: WSLでmacのopenコマンドみたいなこと - Qiita
まとめ
冒頭に書いたようなコマンドになります。
$ file=mydir/index.html && if type cmd.exe; then cmd.exe /c start ${file}; else open ${file}; fi
URL等も、これで開くことができます。
$ file='https://www.google.co.jp/' && if type cmd.exe; then cmd.exe /c start ${file}; else open ${file}; fi