TL;DR

WSL2はとても使いやすく快適なのですが、たまにこれできるとすごく快適になるのに、ということがあると思います。解決できるたびに追記していきたいです。

基本

exeファイル

WSL2ではWindows上のexeファイルが使えます。使えるexeファイルは色々ありますが、使ったことがあるものをまとめます。

コマンド用途
cmd.exeコマンドプロンプト
powershell.exePowershell
clip.execlipboard
explorer.exeエクスプローラー
notepad.exeメモ帳
write.exeワードパッド

コマンドプロンプトやPowershellを使うことで、WSL2側とWindows側をつなげることが可能です。また、clip.exeを使えば、クリップボードに文字列をコピーしたいときとかに便利です。

wslpathコマンド

WSL2のパスはWindows側とは違った形態なので、こういったexeファイルを使う際にはWindows側が解釈できる形に加工する必要があります。

これは、wslpathコマンドを使うと簡単です。以下のような感じのコマンドです。 デフォルトだと、windowsのパスをWSLパスに加工するのですが、WSL側では逆がしたいことがほとんどなので、wslpath -awをつけることになると思います。絶対パスに変換するのは安心感があるからです。

wslpath
Usage:
    -a    force result to absolute path format
    -u    translate from a Windows path to a WSL path (default)
    -w    translate from a WSL path to a Windows path
    -m    translate from a WSL path to a Windows path, with '/' instead of '\'

EX: wslpath 'c:\users'

WSL2かどうかを判別する

dotfileの設定などの際にWSL2上かどうかを判定したいことがあります。

自分は以下のように判定しています。

if [[ $(uname -r) == *'microsoft'* ]]; then
    echo WSL2
fi

実際の用途

openコマンド

Macを使用している方には通じると思うのですが、ファイルを規定のアプリで開いてくれるコマンドです。WSL2では以下のような形で実現できます。

cmd.exe /c start $(wslpath -aw $file)

Explorerで開きたい場合は、

explorer.exe $(wslpath -aw $file)

clipboardに文字列をコピー

clip.exeにパイプで文字列を流せばいいです。

echo "hello" | clip.exe

clipboardに画像をコピー

トリッキーなことをします。powershell.exeの引数にPowershellスクリプトを流せば実行してくれます。以下のps1ファイルを適当な名前で作成します。

imgcopy.ps1
[Reflection.Assembly]::LoadWithPartialName('System.Drawing');
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms');

$filename = $Args[0];
$file = get-item($filename);
$img = [System.Drawing.Image]::Fromfile($file);
[System.Windows.Forms.Clipboard]::SetImage($img);
powershell.exe "./imgcopy.ps1 image.png"

clipboardの画像を貼り付け

powershellのGet-Clipboardを使えば実現可能です。

powershell.exe "(Get-Clipboard -Format Image).Save('image.png')"

参考

記事に間違い等ありましたら、お気軽に以下までご連絡ください

E-mail: illumination.k.27|gmail.com ("|" replaced to "@")

Twitter: @illuminationK

当HPを応援してくれる方は下のリンクからお布施をいただけると非常に励みになります。

Ofuse

Other Articles

Privacy Policy

Copyright © illumination-k 2020-2022.