我正在尝试在bash.exe和mintty.exe上运行Unix命令,这些命令可以在Cygwin64/bin中找到(例如,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有什么不同
发布于 2014-04-12 23:02:35
这两个程序在任何情况下都不能相互替代。Bash是一个shell,而MinTTY是一个terminal emulator。MinTTY通常在自己内部运行用户的外壳,它可能是Bash也可能不是。您通常将这两个程序一起使用。
如果您检查Cygwin的setup.exe构建的MinTTY快捷方式,您会发现它不是该程序的简单启动。它以mintty -的身份运行,告诉MinTTY将用户的外壳作为“登录”外壳运行。
这就是你遇到的问题。如果你在没有选项的情况下运行bash.exe,你只会得到带有默认配置的裸壳,这意味着它不会做像添加Cygwin /bin到你的PATH这样的事情。同样,如果您在不带选项的情况下运行mintty.exe,它也会在不带选项的情况下运行您的用户的shell。当您给mintty.exe加上破折号而不是程序名时,它会将用户的shell作为登录shell运行:bash -l,而不仅仅是bash。该选项会导致Bash在启动后立即读入一堆启动脚本,这将设置命令路径和其他更多内容。
因此,如果出于某种原因,您必须在MinTTY外部运行bash.exe,则可以使用bash -l,以便在通过mintty -运行时使行为更接近于bash.exe。但是,您将失去所有的终端仿真器功能。例如,MinTTY的复制-粘贴行为比Windows的控制台要好得多,特别是在Windows8和更早的版本上。
(Windows10的初始版本包含a much-improved console,最近的Windows Terminal附加组件进一步改进了功能,但MinTTY仍然是更强大的选项,尤其是在使用Cygwin时。)
在Cygwin命令提示符下输入man mintty,可以更全面地解释MinTTY为您做的所有事情。这个特殊的问题在the MinTTY manual page的INVOCATION部分得到了回答。
https://stackoverflow.com/questions/23031164
复制相似问题