为什么cmder不导入用户路径变量?

xin*_*ing 7 path command-line environment-variables conemu cmder

cmder 中的路径变量仅包含从系统路径变量导入的那些路径。而在普通命令 shell 中,系统路径和用户路径将被连接起来。

我在 cmder_dir\vendor\init.bat 中找到了以下几行:

:: Enhance Path
@set git_install_root=%CMDER_ROOT%\vendor\msysgit
@set PATH=%CMDER_ROOT%\bin;%git_install_root%\bin;%git_install_root%\mingw\bin;%git_install_root%\cmd;%git_install_root%\share\vim\vim74;%CMDER_ROOT%;%PATH%
Run Code Online (Sandbox Code Playgroud)

但显然上面的 %PATH% 中只包含系统路径。

我怎样才能向它添加用户路径?

小智 6

正如您已经发现的那样,%PATH%init.bat 中确实包含用户路径。然而,问题并不完全是 cmders 的错。它与DOS或批处理文件有关。

例如PATH作为

C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\
Run Code Online (Sandbox Code Playgroud)

线

@set PATH=%OTHER_PATHS%;%PATH%
Run Code Online (Sandbox Code Playgroud)

被替换为

@set PATH=C:\OTHER\PATHS;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\
Run Code Online (Sandbox Code Playgroud)

它显然被解释为

@set PATH=C:\OTHER\PATHS;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & 
MySQL Utilities 1.5.4 1.5\ #separate line/command
Run Code Online (Sandbox Code Playgroud)

这导致 cmder 尝试以MySQL该行的其余部分作为参数执行。

这种现象也会导致你的用户路径从cmder使用的路径中掉线,导致你无法使用用户定义的路径。cmder 启动时有没有输出什么,或者尝试执行什么?

对于遇到此问题的其他人,只需将路径&用双引号括起来即可。所以在我的情况下,这将是

"C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\"
Run Code Online (Sandbox Code Playgroud)

这为我修好了。

我对 DOS 和批处理的了解非常少,这些只是我通过反复试验得出的观察结果。我刚刚发现这个并想分享。


Max*_*mus 0

绝对错误的。

cmder实际上是一个ConEmu。并且 ConEmu 不会“导入”变量。相反,正如实际上所有 Windows 应用程序所做的那样,ConEmu 从父进程继承变量。这可以使用 ProcessExplorer 轻松检查。