DOS/CMD中where命令返回多个可执行文件结果时,实际执行哪一个?Win10多环境下的实操疑问
Windows下grep命令执行优先级的问题解答
咱们先明确你的环境:
- 当前系统:Windows 10
- 已安装工具:Cygwin、Git for Windows、Ubuntu WSL
你执行的命令及返回结果
DOS(CMD)环境下的输出
执行 where grep
C:\>where grep C:\cygwin64\bin\grep.exe C:\Program Files\Git\usr\bin\grep.exe
执行 which grep
C:\>which grep /usr/bin/grep
PowerShell环境下的输出
执行 gcm grep*
C:\> gcm grep* CommandType Name Version Source ----------- ---- ------- ------ Application grep.exe 0.0.0.0 C:\cygwin64\bin\grep.exe Application grep.exe 0.0.0.0 C:\Program Files\Git\usr\bin\grep.exe
核心问题解答:实际运行哪个?遵循什么顺序?
你直接在CMD或PowerShell里敲grep ...时,实际运行的是C:\cygwin64\bin\grep.exe。
这里的执行规则其实很明确:
不管是CMD还是PowerShell,都是严格按照系统PATH环境变量的目录顺序来查找可执行文件的——它会从PATH里的第一个目录开始逐个检查,找到第一个匹配的grep.exe就会直接启动,不会继续往后查找。
你看到where和gcm的结果里Cygwin的grep排在最前面,本质就是因为你的PATH环境变量中,C:\cygwin64\bin这个目录的位置比C:\Program Files\Git\usr\bin更靠前,工具返回的结果顺序完全对应PATH的查找优先级,和实际执行的顺序是一致的。
另外提一句你在CMD里执行which grep得到的/usr/bin/grep,这个是Git for Windows自带的which命令返回的结果,它会优先适配Git的环境路径,并不是CMD实际会执行的那个grep路径,别和实际执行优先级搞混了。
内容的提问来源于stack exchange,提问作者evilmandarine
相关产品推荐
相关产品推荐

