Cygwin Bash.exe与mintty.exe

时间:2014-04-12 13:43:20

标签: windows cygwin

我正在尝试在bash.exe中找到的mintty.exeCygwin64/bin上运行Unix命令(例如,usr / bin / bash.exe)。当我尝试运行Unix命令ls时,我得到bash: ls: command not found。但是,当我单击Cygwin终端的桌面图标,并在生成的Cygwin终端中输入ls时,像ls这样的Unix命令工作!为什么Unix命令不能在bash.exemintty.exe上运行,但在终端上点击图标的结果?此外,bash.exemintty.exe带来的两个贝壳有什么不同?

1 个答案:

答案 0 :(得分:34)

这两个程序彼此之间没有任何替代方案。 Bash是shell,MinTTY是terminal emulator。 MinTTY通常在其自身内运行用户的shell,可能是也可能不是Bash。也就是说,您通常一起使用这两个程序。

如果你检查Cygwin的setup.exe构建的MinTTY快捷方式,你会发现它不是一个简单的程序启动。它以mintty -运行它,告诉MinTTY将用户的shell作为“登录”shell运行。

这是您遇到的问题。如果您在没有选项的情况下运行bash.exe,那么您只需使用默认配置获取裸shell,这意味着它不会将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,但是MinTTY仍然更好,恕我直言,尤其是在与Cygwin合作时。)

在Cygwin命令提示符下说man mintty,以便更全面地解释MinTTY为您所做的所有事情。 the MinTTY manual page INVOCATION 部分回答了这个特殊问题。