シェルからWSLか否かを判定する
今までシェルの設定ファイルをwslとそれ以外で分けていたが管理が面倒なので統合したい その為にはwsl固有の設定のためにシェルで判定をしなければならないので手段をまとめてみた
カーネルで判定
wslのカーネルにはwsl若しくはWSLがあるのでこれで判定する
code:sh
uname -r | grep -i -q wsl
外部コマンド+パイプなので少々重い
Cドライブの有無で判定
wslからはwindowsの各ドライブが/mnt/cなどの形で見えるのでこれで判定する code:sh
test -d "/mnt/c"
POSIXシェルならほぼほぼ確実に動作する
/proc/versionで判定する方法
code:sh
grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null
上2つはヒネクレたカーネル名やマウントをすると誤作動するという欠点がある
自分で使う分には問題はないだろう
copilotのものは外部コマンドを呼び出してしまうものの,おそらく確実に動作しそう