Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




我正在尝试在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带来的两个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/

10-12 07:36