gpt4 book ai didi

linux - .zshrc 中最有效的 if 语句来检查 Linux 操作系统是否在 WSL 上运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:06 24 4
gpt4 key购买 nike

在我的 .zshrc 文件中,我有条件地设置我的 PATH 变量,具体取决于我是在 Linux 还是 macOS 上运行 - 我现在试图弄清楚是否有一种方法可以从我的 .zshrc 中有效地检测到我是否在运行在 WSL 上的 Linux 上工作。

我想知道我是否可以以某种方式检查/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 文件是否存在更好的想法,我将非常感激!

最佳答案

有许多可能的方法可以在任何 shell 中检查 WSL。大多数可靠方法是:

  1. 来自 uname -r 命令输出。
  2. 来自 /proc/version 文件。
  3. 来自 /proc/sys/kernel/osrelease 文件。
#!/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

也有很多文件存在可以用shell脚本检查。比如只有WSL有1./dev/lxss 2./bin/wslpath 3./sbin/mount.drvfs 4./proc/sys/fs/binfmt_misc/WSLInterop 5. /etc/wsl.conf 文件,但 GNU/Linux 发行版没有。

查看更多:

关于linux - .zshrc 中最有效的 if 语句来检查 Linux 操作系统是否在 WSL 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53996607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com