运行 CygWin shell:哪些 Windows 控制台(DOS)命令会消失?

运行 CygWin shell:哪些 Windows 控制台(DOS)命令会消失?

如果在我的 Windows 中安装了 CygWin (v2.831 32bits),我会这样做:

cmd
mode 80,50

屏幕宽度发生了变化,但如果我打开 CygWin 终端,例如 bash:

C:\cygwin\bin\bash --login -i
$ mode 80,50
bash: mode: command not found

因此,我假设“模式”命令不再存在。只要许多其他命令继续存在,例如:

$ getmac
Dirección física    Nombre de transporte
=================== ==========================================================
08-00-27-37-19-63   \Device\Tcpip_{8B079C63-6C1A-4D39-AF22-6F692B0188EB}

(我的 Windows 是西班牙语,抱歉)
我想知道其他哪些命令(或者可能是设备,但不像 NUL,具体保持现有)会消失?

编辑:对于来这里寻找“更多”问题,它包含在util-linuxCygWin的包中。

答案1

不,“mode”命令不会“消失”,您仍然可以将其作为“mode.com”调用。发生的事情是,当 Cygwin 版本的 bash 循环搜索 PATH 目录中的文件时,它会在提示符中将“.exe”附加到可能可执行的名称上。然而,经典的 Windows命令执行程序在同一进程中附加“.exe”和“.com”(“.bat”和“.cmd”也附加)。

C:\Windows\System32>where mode
C:\Windows\System32\mode.com

为了回答第二个问题,我查找了 Windows 上 mode.com 的 cygwin 路径:

$ which mode.com
/cygdrive/c/Windows/system32/mode.com

并获取同一目录中的 *.com 可执行文件列表。

$ ls -l /cygdrive/c/Windows/system32/*.com

通过观察结果,我们可以说至少以下命令在 bash 中“消失”了:chcp.com、diskcomp.com、diskcopy.com、format.com、mode.com、more.com、tree.com。

更新时间 2014-03-05 16:45 GMT+0100:CMD.EXE 会自动完成 PATH 中所有具有 PATHEXT 列表中扩展名的文件,而 bash 则会自动完成 PATH 中所有可执行文件,无论其扩展名是什么。

如果我输入“forma”并按下 TAB,它会正确地自动补全为“format.com”。但是,如果我输入“mode”并按下 TAB 一次,只会发出哔声;如果我再次按下 TAB,则会显示“mode.com”和“modemui.dll”之间的选择。经过更多测试后,我认为 Cygwin bash 补全存在错误,导致第一次按下 TAB 时发出哔声而不是打印选项。这与扩展无关。

另一个问题是,我可以输入“notepad”或“notepad.exe”,而 cygwin 会发现它必须执行 /cygdrive/c/Windows/system32/notepad.exe。同时,如果我想执行“foobar.bat”或“foobar.com”,则需要提供扩展名。看来 Cygwin 对“.exe”后缀有特殊处理,事实确实如此(请参阅或许后缀功能和stat_suffixes数组)。此外,看起来“.bat”、“.com”和“.cmd”在spawn.cc 版本 1.214并且没有被重新添加最近的更新

欢迎在 cygwin 邮件列表中询问第一个问题,在 cygwin-developers 中询问第二个问题。我本人并没有真正参与 Cygwin,但这就是您可以为它做出贡献的方式!:-) 另外,纠正我对您最初问题的回答:除 .EXE 外,所有带有 PATHEXT 列表中扩展名的 Windows 可执行文件都会消失:

C:\Windows\System32>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

相关内容