首页 > 解决方案 > 为什么 $OSTYPE 在 Windows 上返回“linux-gnu”?

问题描述

问题

当我在 Windows 上运行 bash 脚本时:

bash my_script.sh

我得到linux-gnu$OSTYPE剧本里面的东西。
为什么会这样?我假设我安装了 WSL 在这里是相关的。

在 PowerShell 和 CMD 中测试。
Git bashmsys按预期返回!谢谢@user1934428

背景

我想从 bash 启动一些 python 脚本,但不是在 WSL 中。
从我的命令行,我在 Windows 上找到了不同的 python 版本,但是从 bash 脚本内部,它使用的是 WSL 内部的一个(GitBash 除外)。

标签: windowsbash

解决方案


没错,在 PowerShell 或 CMD 中运行 bash 命令将启动 WSL 来运行您的脚本。cat /etc/issue您可以通过在 bash 脚本中运行来确认这一点(并查看 WSL 的版本) 。您的 WSL 环境将具有一组独立的环境变量(不仅仅是 $OSTYPE)。您可以通过将Get-ChildItem -Path Env:\PowerShell 中的输出与env(从 PowerShell 启动 bash 之后)的输出进行比较来看到这一点。

我怀疑您看到的 python 版本差异是 WSL 运行时中的 PATH 变量与您在 PowerShell 环境中设置的不匹配的结果。alias python=/c/path/to/python.exe您可以通过添加到 bash 脚本的开头来设置包含要使用的 python 可执行文件的路径的别名来解决版本问题。

或者,您可以使用 Cygwin 或 git-bash 之类的工具来运行脚本。我不确定他们是否会使用与 Windows 相同的路径变量,因此您可能也需要手动设置这些变量。


推荐阅读