Skip to content

Instantly share code, notes, and snippets.

@mmktomato
Last active January 1, 2025 16:21
Show Gist options
  • Save mmktomato/e75a166a09fe8920919cf67e5599487d to your computer and use it in GitHub Desktop.
Save mmktomato/e75a166a09fe8920919cf67e5599487d to your computer and use it in GitHub Desktop.
[shell] WSL かどうかを判別する

[shell] WSL かどうかを判別する

注:2018年に書いたものです。

シェルの実行環境が WSL でかどうかを判別する方法をいくつかまとめました。確認した環境は以下のとおりです。

  • Ubuntu 16.04 (Windows 10 Creators Update)
  • bash

$PATH

cmd.exe

Windows のシェルである cmd.exe に PATH が通っているかどうかで判定する方法です。cmd.exe のように拡張子まで指定する必要があるので注意しましょう。

$ which cmd.exe
/mnt/c/Windows/System32/cmd.exe

windows/system32

同様に、Windows の大事なコマンドが格納されるフォルダである C:\windows\system32 フォルダに PATH が通っているかどうかで判別する方法です。ドライブレターは環境によって変わる可能性があるので省略しています。

$ echo $PATH | grep -i 'windows/system32'
...(略)...
/mnt/c/Windows/System32

ファイルシステム系

C ドライブがマウントされているか

Windows のドライブをマウントするファイルシステム (なのか?) である drvfs によって C ドライブがマウントされているかどうかで判別する方法です。ドライブレターは環境によって変わる可能性があります。

$ mount | grep -i 'drvfs'
C: on /mnt/c type drvfs (rw,noatime)

/proc/sys/fs/binfmt_misc/WSLInterop が存在するか

WSLInterop ファイルが存在するかどうかで判別する方法です。

$ if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then \
>   echo 'WSL'; \
> fi
WSL

"Microsoft" が含まれるかどうか系

uname -r

uname -r の結果に "Microsoft" が含まれるかどうかで判別する方法です。

$ uname -r | grep -i 'microsoft'
4.4.0-43-Microsoft

/proc/version

同様に、 /proc/version に "Microsoft" が含まれるかどうかで判別する方法です。

$ cat /proc/version | grep -i 'microsoft'
Linux version 4.4.0-43-Microsoft ([email protected]) (gcc version 5.4.0 (GCC) ) #1-Microsoft W
ed Dec 31 14:42:53 PST 2014

/proc/version_signature

/proc/version_signature に "Microsoft" が (ry

$ cat /proc/version_signature | grep -i 'microsoft'
Microsoft 4.4.0-43-Microsoft 4.4.35

/proc/sys/kernel/osrelease

/proc/sys/kernel/osrelease に (ry

$ cat /proc/sys/kernel/osrelease | grep -i 'microsoft'
4.4.0-43-Microsoft

まとめ

uname -r を見るのは王道という感じがしますね。スクリプトの中で使うなら /proc/sys/fs/binfmt_misc/WSLInterop の存在をチェックするのが良さそうです。他のコマンドを呼び出さなくてすむので。

目的にあった方法を使い分けましょう。

参考

以下の issue を参考にいくつか付け加えました。

Provide a way to positively detect WSL from an app compiled on Linux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment