Closed3

シェルスクリプトでWSL上のLinux環境を判定する

あーるあーる

WSL固有の処理を行いたい

シェルスクリプト内でWSLの環境を判定して、処理を分岐したいことがよくあるので備忘録。

WSLはLinuxとして判定できるが、WSL上で動いているLinuxと区別したい場合の処理。

Termux(Android)での環境分岐も以前スクラップにしているため、詳しくは以下を参照のこと。

https://zenn.dev/ryuu/scraps/07459df258ff08

あーるあーる

WSLの分岐処理判定

シェルスクリプト内でOSに分岐を入れる場合、unameコマンドの結果からifcaseなどで処理を分岐させることが多い。

WSLでunameコマンドを使用した場合以下のような結果となる。

$ uname
Linux

このままではWSLの判定ができないため、WSLの判定に使うパスのようなものがあればいい。

この手のやり方は多数あるが、よく使うものをまとめておく。

あーるあーる

WSLInteropの有無での判定

WSLにて環境固有のファイルWSLInteropがあるか。判定して分岐させる。

WSLの環境ではHello WSL!と表示し、それ以外ではOther osと出力するシェルスクリプト。

wsl.sh
#!/usr/bin/env bash

if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then
  echo "Hello WSL!"
else
  echo "Other os"
fi

WSLで実行すると以下のような結果になる。

$ bash wsl.sh
Helllo WSL!

WSLnteropが存在するのでHello WSL!と出力されるのが確認できた。

このスクラップは2022/07/06にクローズされました