windows - 为什么 $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 除外)。
解决方案
没错,在 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 相同的路径变量,因此您可能也需要手动设置这些变量。
推荐阅读
- url - 如何使用带有用户名/密码和 cookie 的 curl 下载文件?
- haskell - 哈斯克尔。返回列表中所需项的最大序列的长度
- git - 与 npm 等包管理器相比,使用 git 子模块的主要优势是什么?
- javascript - 有没有办法让 Electron 主进程脚本使用 `postMessage` 函数监听页面发布的消息?
- linkedin - 如何使用 LinkedIn API 获取公司洞察
- python - 展开列表字典以获取列表中每个值的键排列
- c++ - 将旧库与新模块系统一起使用
- javascript - 在 ReactJS 中传递 Props
- python - 我无法将从套接字接收的数据更改为整数。我收到此错误“invalidlateral for int () with base 10”
- html - 在文件类型输入的接受属性中传递 .png 和 image/png 有什么区别?