動機
windowsのwsl上でopen Hoge/Hoge2/hoge3.txt
のようにコマンド1つでファイルを開きたかった。
macのopen、linuxのxdg-open、windowsのstartコマンドのように。
以下の記事を見たのがきっかけ。
(参考:https://qiita.com/chez_sugi/items/603a0ba8016aaae9ef98)
しかし、この記事のやり方では自分の環境では
open Hoge/Hoge2/hoge3.txt
というようにカレントディレクトリ以外にあるファイルを開くことができなかった。
現状
startコマンドに与えられるPATH形式がlinuxのPATH形式なので認識されない。
また/mnt/c/~などとすると/mntがwindowsコマンドへのパラメータと認識されてエラーになる。
よって、受け取ったPATHをwindowsのPATH形式に変換する必要がある。
結果
PATHの型式変換
wsl上で受け取ったPATHの絶対PATHをreadlink -f hoge
で取得する。
(参考:https://staffblog.amelieff.jp/entry/2018/05/30/094427)
linuxのPATH形式の絶対PATHをwslpath -w hoge
でwindowsのPATH形式に変換する。
(参考:https://4thsight.xyz/2977)
Bashで組み合わせ
以下の記事のスクリプトを元にしました。
(参考:https://ptsv.jp/scripts/wslstart/)
#!/bin/bash
cmd=$(which cmd.exe)
trg=$(readlink -f "$1")
wpath=$(wslpath -w "$trg" 2>/dev/null)
if [ $? -ne 0 ]; then
wpath="$1"
fi
$cmd /c start "$wpath"
結論
wslで与えられたPATHをreadlink,wslpathでwindowsのPATH形式に変換してstartコマンドへ渡せばよい。
課題
特に自分ではわからない。
改善点などあればぜひ教えていただきたいです!
追記2019/5/5
ユーザー名にスペースが入っているとうまく開かれない
追記2019/10/31
wsl-openを使えば良い……path変換の勉強にはなった…
おわり
ずっとmacを使っていて最近になってwindowsを使うようになりました。
wslを知って、macに近いlinuxの環境とwindowsの環境の2つでいろいろやっています。