• HOME
  • DOCS
  • WTF
  • TECH
  • LIFE
  • PAGES
    • ARCHIVE
    • TAGS
    • ABOUT
    • FRIENDS
    • RSS
  • TOOLS
    • GEO
    • RANDOM()
    • GOO.GL
    • CSS HEART
Aj's Blog

记录时间溜走的瞬间和折腾过的那些事

Windows环境变量 与 Windows下多个Linux环境切换

2012-11-16  TECH  Bash  etc\profile  git  make  make install  mingw  Msys  msysGit  ssh  Windows Environment Variables  Windows环境变量  优先级  

一、Windows环境变量的优先级与查找过程(Windows Environment Variables)

相同变量名优先级: 系统变量 > 用户变量

调用程序时,查找过程

1、首先,按路径先后顺序搜索,返回最先找到的

2、其次,如果最先找到的程序带有配置文件则加载对应配置文件后调用,否则直接调用这个程序

比如:
Bash,在CMD内调用Bash,则会自动加载Bash的配置文件一半为(etc/profile),
在Bash内继续调用其他的程序,则按照Bash配置设定的规则。

例:

Bash: D:\Bash\sh.exe,Bash配置制定 HOME 为D:\Bash\,D:\Bash\ 中包含vim7.3.exe

PATH: D:\vi7.2;D:\Bash\;

执行结果:
CMD -> vi -> D:\vin7.2\vim7.2.exe
CMD -> Bash -> vi -> D:\Bash\vi7.3\vim7.3.exe

若改变PATH为
PATH: D:\Bash\;D:\vi7.2;

执行结果:
CMD -> vi -> D:\Bash\vim7.3.exe
CMD -> Bash -> vi -> D:\Bash\vi7.3\vim7.3.exe

二、系统中含有多个类Linux环境时的环境切换

比如本人系统中包含 MinGW自带的MSYS1.0 和 msysGit自带的Linux环境

如果多个环境同时加载,执行make;make install;的时候,会由于多个程序的版本新旧问题产生各种莫名的错误。

建议解决办法: 在默认的系统PATH中不包含任何Linux环境,而通过批处理切换对应的环境。

例:
[1] D:\MinGW\msys\1.0\bin\
[2] D:\Git\bin\

C:\Windows\linux.bat 加载 [1]

@CLS
@SET ___linux=D:\MinGW\msys\1.0\bin
@IF DEFINED ___load (
  @echo.
  @echo [-] Linux Tools Already Loaded.
  @echo.
) ELSE (
  @SET ___load="1"
  @SET Path=%___linux%;%path%;
  @echo.
  @echo [+] Linux Tools Loaded.
  @echo.
)
@COLOR 0F
@bash --version
@echo.
@CMD /C "bash --login -i -c "cd \"%CD%\";exec bash"

另外值得注意的是在Win7系统中MinGW自带的MSYS1.0配置文件(MinGW\msys\1.0\etc\profile)中 HOME 部分有误,
git、ssh相关配置都存在 C:\Users\[用户名]\ 目录中,
修改profile,找到下面一段

# Set up USER's home directory
if [ -z "$HOME" ]; then
  HOME="/home/$LOGNAME"
fi

修改为以下内容即可

# Set up USER's home directory
# WIN7中用户根目录为: C:\Users\[用户名]\
if [ -z "$HOME" -o ! -d "$HOME" ]; then
  HOME="$USERPROFILE"
fi
下一篇:   科普:COM 与 ActiveX / OLE
上一篇:   Kloxo面板suPHP的几个问题
暂无评论

Cancel reply