使用 WSL 时检查是否在 Windows 中运行的 Shell 脚本?

Mat*_*rka 3 windows shell zsh windows-subsystem-for-linux

我正在尝试向我的 .zshrc 文件添加一个条件,该条件将初始化一些配置内容,而我只想在适用于 Linux 的 Windows 子系统中进行这些配置。我尝试过这个但没有运气:

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

这使:

no such file or directory: cmd.exe /c "systeminfo" | grep "^OS Name"
Run Code Online (Sandbox Code Playgroud)

...但是如果我直接在 shell 中键入该命令,该命令就会起作用。有任何想法吗?

Ash*_*cob 10

使用uname -r就可以了

根据https://github.com/microsoft/WSL/issues/423#issuecomment-608236476,如果您使用

uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip'
Run Code Online (Sandbox Code Playgroud)

如果是 WSL,您将得到“Microsoft”输出。否则,您应该不会得到任何输出。

所以你可以使用类似的东西

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