Сценарий оболочки, чтобы проверить, работает ли в Windows при использовании WSL? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь добавить условие в мой файл .zshr c, который будет инициализировать некоторые вещи конфигурации, которые я хочу выполнить только в подсистеме Windows для Linux. Я пробовал это, но не повезло:

if [ "$('cmd.exe /c "systeminfo" | grep "^OS Name"')" =~ "Windows" ]; then
        echo "windows baby!"
fi

Что дает:

no such file or directory: cmd.exe /c "systeminfo" | grep "^OS Name"

... но эта команда работает, если я набираю ее непосредственно в оболочке. Есть идеи?

1 Ответ

2 голосов
/ 03 апреля 2020

Использование uname -r делает трюк

Согласно https://github.com/microsoft/WSL/issues/423#issuecomment -608236476 , если вы используете

uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip'

Вы получите вывод как «Microsoft "на случай, если это WSL. В противном случае вы не получите никакого вывода.

Так что вы можете использовать что-то вроде

if [ $(uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip') ];
then
        echo "This is Windows WSL baby!"
else
        echo "Not Windows"
fi
...