想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我正在尝试在
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
带来的两个shell有什么区别? 最佳答案
这两个程序在任何方面都不能相互替代。 Bash是shell,而MinTTY是terminal emulator。 MinTTY通常会在其内部运行用户的 shell , 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上。
(Windows 10包含a much-improved console,但是MinTTY仍然更好,恕我直言,尤其是在与Cygwin一起使用时。)
在Cygwin命令提示符下说man mintty
,以更全面地说明MinTTY为您所做的所有事情。 the MinTTY manual page的 INVOCATION 部分回答了这个特定问题。
关于windows - Cygwin Bash.exe与mintty.exe ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23031164/