Наиболее эффективен оператор if в .zshrc для проверки, работает ли ОС Linux на WSL? - PullRequest
0 голосов
/ 01 января 2019

В моем файле .zshrc я условно устанавливаю переменную PATH в зависимости от того, работаю ли я в Linux или macOS - сейчас я пытаюсь выяснить, есть ли способ, которым я могу эффективно определять из моего .zshrc, если яя работаю в Linux, работающем на WSL.

Мне интересно, могу ли я каким-то образом проверить наличие / mnt / c / Program Files или аналогичных файлов - но не думаю, что должен быть лучший способ?

Пример моего текущего .zshrc:

PATH="/usr/local/sbin:$PATH" 
if ! [[ "$OSTYPE" == "darwin"* ]]; then
  export PATH="$HOME/.nodenv/bin:$HOME/.rbenv/bin:$PATH"
fi
eval "$(rbenv init -)"
eval "$(nodenv init -)"
PATH="$HOME/.bin:$PATH"
if [[ "$OSTYPE" == "darwin"* ]]; then
  export ANDROID_SDK_ROOT="$HOME/Library/Android/sdk"
  export PATH="$PATH:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/tools/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/build-tools:$ANDROID_SDK_ROOT/tools/lib/x86_64"
  export PATH="$PATH:/usr/local/share/dotnet"
fi

Если у кого-то есть идеи получше, чем каким-либо образом проверять наличие / mnt / c / Program Files, я был бы очень признателен!

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Существует множество возможных способов проверки WSL в любой оболочке.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *..

#!/bin/bash

if uname -r |grep -q 'Microsoft' ; then
    echo True
fi

if grep -q -i 'Microsoft' /proc/version ; then
    echo True
fi

if grep -q -i 'Microsoft' /proc/sys/kernel/osrelease ; then
    echo True
fi

Также существует множество файлов, существование которых можно проверить с помощью сценария оболочки.Например, только WSL имеет 1. /dev/lxss 2. /bin/wslpath 3. /sbin/mount.drvfs 4. /proc/sys/fs/binfmt_misc/WSLInterop 5. /etc/wsl.conf файлов, но в дистрибутивах GNU / Linux его нет.

Подробнее:

0 голосов
/ 02 января 2019

В WSL есть специальный файл для проверки совместимости, называемый /proc/sys/fs/binfmt_misc/WSLInterop, который является файлом, специфичным для WSL.Вы можете проверить, используя следующую команду:

#!/bin/bash
if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then
  echo True
fi

или более простой однострочный код (в bash):

[ -f /proc/sys/fs/binfmt_misc/WSLInterop ]

Это вернет код выхода 0, если true, код выхода 1если ложь.

0 голосов
/ 01 января 2019

Благодаря комментарию Biswapiryo - я придумал это решение для обнаружения WSL:

if [[ $(uname -r)] == ^*Microsoft$ ]]; then
  # Code goes here
fi
...