1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

windowsのwsl上でopenコマンド

Last updated at Posted at 2019-04-15

動機

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/)

open.sh
#!/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つでいろいろやっています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?