Windows Cygwin Bash.exe与mintty.exe

Windows Cygwin Bash.exe与mintty.exe,windows,cygwin,Windows,Cygwin,我试图在Cygwin64/bin中的bash.exe和mintty.exe上运行Unix命令(例如,usr/bin/bash.exe)。当我尝试运行Unix命令ls时,我得到了bash:ls:commandnotfound。但是,当我单击Cygwin终端的桌面图标,并在生成的Cygwin终端中输入ls时,Unix命令如ls起作用!为什么Unix命令不能在bash.exe和mintty.exe上运行,而只能在终端上显示单击图标的结果?此外,bash.exe和mintty.exe所带来的两个shel

我试图在
Cygwin64/bin
中的
bash.exe和
mintty.exe
上运行Unix命令(例如,usr/bin/bash.exe)。当我尝试运行Unix命令ls时,我得到了bash:ls:commandnotfound
。但是,当我单击Cygwin终端的桌面图标,并在生成的Cygwin终端中输入
ls
时,Unix命令如
ls
起作用!为什么Unix命令不能在
bash.exe
mintty.exe
上运行,而只能在终端上显示单击图标的结果?此外,
bash.exe和
mintty.exe所带来的两个shell有什么区别?

这两个程序在任何方面都不是彼此的替代品。Bash是一个,MinTTY是一个。MinTTY通常在其内部运行用户的shell,这可能是Bash,也可能不是Bash。也就是说,您通常同时使用这两个程序

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

这就是你遇到的问题。如果在没有选项的情况下运行
bash.exe
,则只会得到裸shell及其默认配置,这意味着它不会执行将Cygwin
/bin
添加到您的脚本中之类的操作。同样,如果不带选项运行
mintty.exe
,它将不带选项运行用户的shell。当您将破折号改为
mintty.exe
而不是程序名时,它将用户的shell作为登录shell运行:
bash-l
,而不仅仅是
bash
。该选项会使Bash在启动后立即读入一组启动脚本,这将设置命令路径以及其他更多内容

因此,如果出于某种原因您必须在MinTTY之外运行
bash.exe
,您可以说
bash-l
,以便在通过
MinTTY-
运行时使行为更接近
bash.exe
。但是,您将失去所有终端仿真器功能。例如,MinTTY的复制粘贴行为比Windows的控制台要好得多,尤其是在Windows 8及更旧版本上

(包括Windows 10,但MinTTY更好,IMHO,尤其是在使用Cygwin时。)


在Cygwin命令提示符下说
manmintty
,更全面地解释mintty为您所做的一切。这个问题在的调用部分得到了回答。

谢谢您的回答!