我在做一个巴什剧本。更准确地说,我的习惯是巴斯克。我需要有单独的信任,这取决于我所处的" Linux“( Windows 10 Linux子系统还是实际Linux)。
我怎么能把他们区分开来?
我试过的事情:
$OSTYPE -都返回linux-gnuuname -a -都返回类似的Linux COMPUTER_NAME_HERE 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linuxlsb_release -a -都返回ubuntu xx.xxcat /etc/issue.net -都返回Ubuntu 14.04.4 LTSld -v -都返回GNU ld (GNU Binutils for Ubuntu) 2.24我发现做这个工作的唯一方法是为Windows子系统设置一些特定的用户名,并使用$USER,但这不是我愿意使用的选项。我需要这是开箱即用的,没有自定义的用户名,环境变量等等。
发布于 2016-11-19 00:01:35
请参阅/proc/sys/kernel/osrelease
您可以使用grep -qi Microsoft /proc/sys/kernel/osrelease 2> /dev/null检查Windows
发布于 2016-08-05 06:02:03
好吧,我找到答案了。我可以使用目录检查/mtn/c/Users,这将只在windows子系统中,如下所示:
if [ -d "/mnt/c/Users" ]; then
echo "this is windows 10 bash"
fi因此,我的最终代码如下所示,以防有人需要这样的代码:
# get "OS type"
# * linux
# * linux_vagrant
# * windows_bash
# * windows_git
# -------------------------------------------
if [ $OSTYPE=="msys" ]; then
MY_BASH_OS="windows_git"
elif [[ $OSTYPE=="linux-gnu" || -d "/mnt/c/Users" ]]; then
MY_BASH_OS="windows_bash"
elif [[ $OSTYPE=="linux-gnu" || $USER=="vagrant" ]]; then
MY_BASH_OS="linux_vagrant"
elif [ $OSTYPE=="linux-gnu" ]; then
MY_BASH_OS="linux"
else
echo "NO OS DETECTED. Exiting my_bash"
return
fi更新:laktak提供了一个更好的解决方案,即检查/proc/sys/kernel/osrelease,这是用于windows的3.4.0-Microsoft。
https://stackoverflow.com/questions/38782042
复制相似问题