Mic*_*ant 61 windows terminal bash shell bash-alias
我使用 Linux 和 Mac,我很快就会教授一些命令行的东西。
我可以在 Windows 上安装什么来给我一个最类似于基本 Mac/Linux Bash shell 的终端窗口?
如果可能,我也希望能够定义 .bash_aliases。
小智 53
您现在可以安装适用于 Linux的Windows 子系统,它允许您在Windows上运行本机用户模式 Linux shell 和工具。这允许您直接在 Windows 上运行Bash shell,并且基于 Ubuntu。
这是在 Windows 10 的周年更新 (2016) 中引入的,默认情况下未启用。要在 Windows 10 周年更新机器上启用新功能,请执行以下操作:
回顾一下历史,早在 2015 年,Astoria 项目就开始将 Android 应用程序引入 Windows,为此他们构建了一个名为 Windows Subsystem for Linux (WSL) 的 Linux 子系统。最终 Astoria 项目因为破坏了他们的 UWP(通用 Windows 平台)战略而被放弃,但保留了一些部分并形成了 bash for Windows 的基础。在整个过程中,Microsoft 与 Canonical(Ubuntu Linux 的创建者)合作,为他们提供包含所有支持工具/二进制文件的本机映像。
此处提供更多信息,
https
: //blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/ https://blogs.windows.com /buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/
https://sec.ch9.ms/sessions/build/2016/P488.mp4(视频)
小智 45
您可以安装Cygwin或MSYS/MinGW,或者您可以在虚拟机中安装完整的 Linux 发行版(例如,使用VirtualBox)。
nde*_*mou 29
以下是 2018-05 年可用选项的列表,其中包含截至 2020-01 年有关 WSL 的大量更新以及有关每个选项的一些详细信息。
WSL 变得越来越成熟(微软很久以前就放弃了beta 警告)并且非常容易安装,所以在大多数情况下它是一个非常好的(如果不是最好的)选择。它使用与大多数其他选项不同的方法来解决问题。您运行的二进制代码与在 Linux 系统上运行的二进制代码完全相同。直到 2020-01 WSL 拦截内核调用并将它们转换为 windows 内核调用(想想 Wine 的反面)。这将改变,因为 WSL 的当前测试版在轻量级 VM 中运行真正的 linux 内核。
无论如何,使用 WSL,您确实获得了一个漂亮的 shell,其中包含您希望在库存 Ubuntu 安装中找到的几乎所有 CLI 好东西apt install,以及存储库中几乎所有可用内容的选项。微软官方声明“WSL 不旨在支持 GUI 桌面或应用程序”,但是有关于如何做的非官方说明。从目前的情况来看(2020-01),WSL 的主要缺点如下:
这是与 cygwin的一个古老但很好的比较(请注意,Rich Turner 是 WSL 团队的成员,他发布了许多有关 WSL 的有用信息)
Cygwin 提供以下内容:
Cygwin 旨在使在 Windows 上移植 Linux 应用程序变得容易。如果某些 C 程序是为 Unix 设计的,并希望使用管道、Unix 风格的文件和目录访问等功能,那么您可以为 Cygwin 编译它,Cygwin 将充当代码和外部操作系统 (Windows)之间的兼容层. 这允许相同的 C 程序在 Linux 和 Windows 上运行,几乎不需要修改。大量 Linux 程序已经编译完成,可以在安装 Cygwin 时运行。但是,作为这些程序的用户,您可能必须熟悉 Unix。例如,您可能需要传递像/cygdrive/c/autoexec.bat而不是这样的参数,c:\autoexec.bat并准备好用 Unix 行终止 ( \n) 而不是 Windows 行终止 ( \r\n)来处理输出。
所有 Cygwin 程序的集合包含一个存储库,尽管 Cygwin 没有传统的 Linux 包管理器,但您可以随时使用非常反直觉的方式从该存储库中添加、删除和更新程序(您运行 Cygwin 的 setup.exe 在安装完成后的任何时间)
Babun是 Cygwin,具有全功能的包管理器 (pact),oh-my-zsh 用于其 shell、git、自动更新和面向插件的架构。尽管默认 shell 是 zsh,但您可以轻松切换到 bash。如果您不介意额外的重量,这似乎是对香草 Cygwin 的不错升级。
Mingw-w64 提供以下功能:
MinGW 主要是 Windows 的软件分发和构建平台。特别是它是 GNU 编译器工具的 Windows 端口,例如 GCC、make、bash 等。它包括相当数量的 GNU 工具和最小的 Unix 兼容层。
Mingw-w64 和 Cygwin 的主要区别在于优先级:Cygwin 旨在提供一个完整的 POSIX 兼容层,包括所有主要 Unix 系统调用和库的完整实现;性能次于兼容性。MinGW 的目标是性能,因此它不会提供某些在 Windows 下无法轻松和/或足够快地实现的 POSIX API。MinGW 的主要目标也是软件开发人员。尽管如此,临时用户也可能会喜欢它的外壳和通用的实用程序。
MSYS2 提供以下内容:
MSYS2 也主要是一个软件分发和 Windows 的构建平台,如 MinGW,但它结合了 Cygwin 的方式和 MinGW 的方式。您可以使用 MSYS2 来创建“MinGW 程序”或“MSYS2 程序”。稍后链接到 MSYS2 (msys-2.dll) 的兼容层,它本身密切关注 Cygwin 的兼容层开发,并进行了一些添加/修改。然而,这两个项目的存储库是完全不相关的。因此,尽管 MSYS2 和 Cygwin 都提供了grep.exe它们可能具有完全不同的版本。
适用于 Windows 的 Git要么只是安装了 git 的 MSYS2 ,要么至少在很大程度上基于 MSYS2。它提供了相同的 shell (bash)、终端 (Mintty) 和包管理器 (pacman)。它似乎是在 Windows 上运行占主导地位的 Git 的最流行的方法,并且您将获得一个不错的 Unix 环境。
除了 WSL 之外,上述大多数工具共享许多通用技术(库、可执行文件、概念)。例如,MinGW 附带的 bash shell 依赖于 msys-2.dll,它本身就是 cygwin.dll 的一个分支。所以是的,有很多混乱的空间:-)
Cmder只为 Windows 提供了一个很好的终端和一个类似 bash 的 shell。它的主要组件是Conemu(终端)。最重要的是,它添加了Clink,它提供了强大的 Bash 风格的命令行编辑、自定义提示布局和 Monokai 配色方案。它与本机 Windows 控制台程序高度(或完全)兼容。
Scoop为许多著名的跨平台程序(包括许多 GNU 工具)提供了命令行包管理器。它下载预编译的包。它既不提供外壳也不提供终端,而是在 Windows 的 cmd.exe 下运行(具有所有限制,但与本机 Windows 控制台程序完全兼容)。它还不包括编译器套件(但当然编译器和开发工具是您可以使用 scoop 安装的典型包)。Scoop 安装的许多程序要么直接来自 MinGW/MSYS 项目,要么是使用他们的工具构建的。
下面的解决方案似乎并不活跃,我从未测试过它们,但它们似乎为其他人完成了这项工作:
Gow (Gnu On Windows) 是 Cygwin 的轻量级替代品,没有外壳。它使用一个方便的 Windows 安装程序,安装大约 130 个非常有用的开源 Linux 应用程序,这些应用程序编译为本地 win32 二进制文件,并通过 windows 的 cmd.exe 提供。它被设计得尽可能小(大约 10 MB)。
UnxUtils & GnuWin32: UnxUtils是通用 GNU 类 Unix 实用程序到本机 Win32 的端口集合,可执行文件仅依赖于 Microsoft C 运行时 msvcrt.dll。您必须下载主要部分和一些更新。GnuWin32 的版本高于 UnxUtils,但需要支持文件(例如 DLL)
MSYS & MinGW似乎已被MSYS2 & MinGW-W64淘汰,所以我从未看过它们。
Mintty 是 Cygwin、MSYS2 及其衍生产品中使用的终端。应该知道,如果您正在运行 Windows 本机控制台程序,它并不是 Windows 命令提示符的轻松替代品。虽然具有简单文本输出的程序通常运行良好,但交互式和全屏程序通常会出现问题。在 Mintty 的主页上阅读更多内容,并阅读Git for Windows FAQ上的条目“一些本机控制台程序在从 Git Bash 运行时不起作用” 。当您遇到此类问题时,该条目有以下建议:
有几种方法可以解决这些问题:
要记住的两个最重要的事情是:
在功率和难以调试的问题之间存在权衡。解决方案越强大,即使在最初看起来与您的 Linux 层无关的方式上,也会出现更多问题。
如果您没有足够的 Linux 经验,请不要使用更强大的解决方案,例如 Cygwin/MSYS2/MinGW
UnxUtils 和 GnuWin32 的功能最弱,但也最不容易引起您的头痛。Cygwin 和类似的东西在功率和头痛方面都名列前茅。Cmder 处于中间位置。因此,当您需要最强大的解决方案时,请睡个好觉并全神贯注。在测试新的和可能不稳定的东西时避免使用强大的解决方案。也不要忘记像 cmder 这样的中等复杂度的解决方案并不是一尘不染的。
Linux 命令遮蔽 Windows 命令的问题是 Cygwin/MSYS2/MinGW 等解决方案中难以调试问题的常见原因。这是一个示例:我有一个使用 timeout 命令的 .bat 文件。在 Cygwin 下运行时会失败,因为 timeout 也是 Linux 命令,但语法不同。发现问题后,我发现我可以在 .bat 文件的顶部添加一个 PATH=... 以确保 windows 命令具有优先级。但是后来我得到了一个更神秘的“不支持输入重定向”错误,并在找到原因之前解决了解决方法。
这是一个 cmder 问题的例子。我在 Cmder 下运行 Windows 版本的 unison,在某些特殊条件下,它完全没有错误消息挂起。相同的命令总是在 cmd.exe 下完美运行。有趣的是它在 Cygwin 下也能完美运行(事实上,如果你有 Unicode 文件名,Cygwin 终端比 cmd.exe 更好,因为 cmd.exe 经常显示格式错误的 Unicode 文本)。
在 2017-05 期间,尽管我很久以前就在使用其中一些工具(主要是 CygWin 和 cmder,但从未用于开发目的),但我对不了解上述工具的差异感到厌烦。所以我花了几个小时来探索风景。本指南是我保留的笔记的结果。我不是该领域的专家,但我努力寻找所有相关信息,以批判的眼光阅读并清楚地呈现最重要的部分。如果出现问题,请发表评论,我会尽力纠正。
最后对一些术语问题表示歉意:在本文中,我有时使用术语 Linux 代替 UNIX 或 POSIX。我知道它们不一样,但是当从如此远的距离接近一个主题时,很难区分它们。即使不难,也需要我没有的时间;-)
And*_*eas 11
GitHub 上还提供了Clink。它使用钩子库将自身集成到 Windows 命令提示符中。
从项目描述:
Clink 将原生 Windows shell cmd.exe 与 GNU Readline 库的强大命令行编辑功能相结合,提供丰富的补全、历史和行编辑功能。
(所以它不提供 bash-as-a-programming-language 特性或任何其他 Unix 好东西)
我在工作中使用 Linux,发现自己有时会在 cmd 中切换,这与我对 Bash 的期望不同。使用 Clink 我可以克服其中的一些缺点。
最近,我还发现了一个有前途但尚未“全能”的项目,名为flinux,它模拟 Linux 系统功能并在其之上提供某种系统(目前基于 Arch Linux)
除了faffaffaff 所说的,Windows 版 Git还包括 Bash 和一些常见的 Linux 命令行程序(例如Vim、sed和gawk)。它基于MSYS。虽然程序的版本很旧,例如 Bash 是 3.1 版。Cygwin将拥有更新版本的实用程序。
我还使用ConEmu作为终端模拟器(主要用于 Vim 中的语法高亮、标签页和更容易的复制粘贴)。console2也是另一个流行的终端模拟器,虽然我还没有尝试过。
| 归档时间: |
|
| 查看次数: |
158352 次 |
| 最近记录: |