首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在编写bash脚本时区分Linux和Windows 10 bash

问如何在编写bash脚本时区分Linux和Windows 10 bash
EN

Stack Overflow用户
提问于 2016-08-05 05:54:45
回答 2查看 518关注 0票数 7

我在做一个巴什剧本。更准确地说,我的习惯是巴斯克。我需要有单独的信任,这取决于我所处的" Linux“( Windows 10 Linux子系统还是实际Linux)。

我怎么能把他们区分开来?

我试过的事情:

  1. $OSTYPE -都返回linux-gnu
  2. uname -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/Linux
  3. lsb_release -a -都返回ubuntu xx.xx
  4. cat /etc/issue.net -都返回Ubuntu 14.04.4 LTS
  5. ld -v -都返回GNU ld (GNU Binutils for Ubuntu) 2.24

我发现做这个工作的唯一方法是为Windows子系统设置一些特定的用户名,并使用$USER,但这不是我愿意使用的选项。我需要这是开箱即用的,没有自定义的用户名,环境变量等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-19 00:01:35

请参阅/proc/sys/kernel/osrelease

您可以使用grep -qi Microsoft /proc/sys/kernel/osrelease 2> /dev/null检查Windows

票数 5
EN

Stack Overflow用户

发布于 2016-08-05 06:02:03

好吧,我找到答案了。我可以使用目录检查/mtn/c/Users,这将只在windows子系统中,如下所示:

代码语言:javascript
复制
if [ -d "/mnt/c/Users" ]; then
  echo "this is windows 10 bash"
fi

因此,我的最终代码如下所示,以防有人需要这样的代码:

代码语言:javascript
复制
# 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。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38782042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档