我正在尝试在 cygwin64/bin
中的 bash.exe
和 mintty.exe
上运行 Unix 命令(例如, usr/bin/bash.exe)。当我尝试运行 Unix 命令 ls
时,我得到了 bash: ls: command not found
。但是,当我单击 Cygwin 终端的桌面图标,并在生成的 Cygwin 终端中输入 ls
时,ls
等 Unix 命令起作用了!为什么 Unix 命令在 bash.exe
和 mintty.exe
上不起作用,但在终端上单击图标的结果?另外,bash.exe
和mintty.exe
带来的两个shell有什么区别?
这两个程序在任何方面都不是彼此的替代品。 Bash 是一个 shell , 而 MinTTY 是一个 terminal emulator . MinTTY 通常在自身内部运行用户的 shell,它可能是也可能不是 Bash。您通常会同时使用这两个程序。
如果您检查 Cygwin 的 setup.exe
构建的 MinTTY 快捷方式,您会发现它不是程序的简单启动。它以 mintty -
运行它,它告诉 MinTTY 将用户的 shell 作为“登录”shell 运行。
这是您遇到的问题。如果你在没有选项的情况下运行 bash.exe
,你只会得到裸壳,它的默认配置,这意味着它不会做一些事情,比如将 Cygwin /bin
添加到你的PATH
.同样,如果您在没有选项的情况下运行 mintty.exe
,它会在没有选项的情况下运行您的用户的 shell。当您给 mintty.exe
一个破折号而不是程序名称时,它会将您的用户的 shell 作为登录 shell 运行:bash -l
,而不仅仅是 bash
。该选项会导致 Bash 在启动后立即读取一堆启动脚本,这会设置命令 PATH 以及其他更多内容。
因此,如果您出于某种原因必须在 MinTTY 之外运行 bash.exe
,您可以说 bash -l
以获得更接近 的行为bash.exe
当通过 mintty -
运行时。但是,您会失去所有终端仿真器功能。例如,MinTTY 的复制粘贴行为比 Windows 的控制台好得多,尤其是在 Windows 8 及更早版本上。
(Windows 10 的初始版本包括 a much-improved console,最近的 Windows Terminal 附加组件进一步改进,但 MinTTY 仍然是更强大的选项,恕我直言,尤其是在使用 Cygwin 时。)
在 Cygwin 命令提示符下输入 man mintty
以获得 MinTTY 为您所做的所有事情的更完整解释。 the MinTTY manual page 的INVOCATION 部分回答了这个特定问题。 .