我正在尝试在bash.exe
中找到的mintty.exe
和Cygwin64/bin
上运行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
带来的两个贝壳有什么不同?
答案 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 部分回答了这个特殊问题。