機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

WSL bashでpowershellに絶対パスのファイルを渡して開く方法

プログラミング

どうやら、WSL bashは絶対パスでファイルを開くことが苦手なようです。
`cmd /c `なんかだと、`C:/`からはじまる絶対パスでいけるんですが、Powershellだと、`powershell . C:/hoge/hoge.mp4`みたいにしても

こうなる。
“`
$ psl . C:\_videos\agd\video_20180824_104256.mp4
. : The term ‘C:_videosagdvideo_20180824_104256.mp4’ is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:3
+ . C:_videosagdvideo_20180824_104256.mp4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:_videosagdvideo_20180824_104256.mp4:String) [], CommandNotFoundExcept
ion
+ FullyQualifiedErrorId : CommandNotFoundException
“`

じゃあ/mnt/パスならどうか。

“`
$ psl . /mnt/c/_videos/agd/video_20180824_104256.mp4
. : The term ‘/mnt/c/_videos/agd/video_20180824_104256.mp4’ is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At line:1 char:3
+ . /mnt/c/_videos/agd/video_20180824_104256.mp4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (/mnt/c/_videos/…0824_104256.mp4:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
“`

ということで、絶対パスはどうも、開けないんですよね。
いや、コマンドプロンプトで開けば、開けるんですけど…いちいち/mnt/→C:変換するのも…っていうか、最近知ったwslpathコマンドもなんかよくわかんないけど使えないし……。まぁベータなんで、そこらへんの不具合は自力で乗り切っていったほうが早い話かなぁと思います。

ということで、絶対パスは無理なので、相対パスに変換してファイルを開く、という方法をとっていきましょう。

[shell – Convert absolute path into relative path given a current directory using Bash – Stack Overflow](https://stackoverflow.com/questions/2564634/convert-absolute-path-into-relative-path-given-a-current-directory-using-bash)によれば、

“`
python -c “import os.path; print os.path.relpath(‘[目的のファイルの絶対パス]’, ‘[カレントパス]’)”
“`

って感じで、pythonのワンライナーで相対パスを割り出せるみたいです。rubyのexpand_path(”,__FILE__)でもいけそうですね。

なので、こうします。

“`
$ python -c “import os.path; print os.path.relpath(‘/mnt/c/_videos/agd/video_20180824_104256.mp4’, ‘$(echo $PWD)’)”
../_videos/agd/video_20180824_104256.mp4
“`

いい感じ。

“`
psl . $(python -c “import os.path; print os.path.relpath(‘/mnt/c/_videos/agd/video_20180824_104256.mp4’, ‘$(echo $PWD)’)”)
“`

……開けました。(pslはpowershell.exeの独自エイリアス。)

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

Bashで!(エクスクラメーション)をエスケープするには
BashでISO8601のタイムスタンプをdateで出力
Bash コマンドが存在するかパターンマッチで判断するには
WindowsにCicaフォントをインストールしてconemuのWSL bashで使えるようにする
bash yes no yes以外なら終了する
PowershellでBashのhistoryコマンド
Bash sedでファイルのテキストを置換する


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu