1、环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如 path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到 path 中指定的路径去找。用户通过设置环境变量,来更好的运行进程。目录定义 环境变量的作用 环境变量设置方法 常见环境变量 在命令行中对环境变量进行编辑的方法 Linux 下的环境变量定义 环境变量的作用 环境变量设置方法 常见环境变量 在命令行中对环境变量进行编辑的方法 Linux 下的环境变量展开编 辑 本 段 定 义环 境 变 量 一 般 是 指 在 操 作 系 统 中 用 来 指 定 操 作
2、 系 统 运 行 环 境 的 一 些 参 数 ,比 如 临 时 文 件 夹 位 置 和 系 统 文 件 夹 位 置 等 。 这 点 有 点 类 似 于 DOS 时 期 的 默认 路 径 , 当 你 运 行 某 些 程 序 时 除 了 在 当 前 文 件 夹 中 寻 找 外 , 还 会 到 设 置 的 默认 路 径 中 去 查 找 。 简 单 地 说 这 里 的 “Path”就 是 一 个 变 量 , 里 面 存 储 了 一些 常 用 命 令 所 存 放 的 目 录 路 径 。 环 境 变 量 相 当 于 给 系 统 或 用 户 应 用 程 序 设 置 的 一 些 参 数 , 具 体 起 什 么
3、作 用 这 当 然 和 具 体 的 环 境 变 量 相 关 . 比 如 path, 是 告 诉 系 统 , 当 要 求 系 统运 行 一 个 程 序 而 没 有 告 诉 它 程 序 所 在 的 完 整 路 径 时 , 系 统 除 了 在 当 前 目 录下 面 寻 找 此 程 序 外 , 还 应 到 哪 些 目 录 下 去 寻 找 ; 再 如 tc 或 vc+中 , set include=path1;path2; 是 告 诉 编 译 程 序 到 哪 里 去 找 .h 类 型 的 文 件 ; 当 然不 仅 仅 是 指 定 什 么 路 径 , 还 有 其 它 的 作 用 的 , 如 set dir
4、cmd=/4 设 置 一 个环 境 变 量 的 作 用 是 在 使 用 dir 命 令 时 会 把 /4 作 为 缺 省 的 参 数 添 加 到 你 的dir 命 令 之 后 , 就 像 你 的 每 个 命 令 都 加 了 /4 参 数 , 它 实 际 上 是 给 命 令 解 释程 序 command 设 置 的 一 个 环 境 变 量 , 并 且 是 给 dir 这 个 内 部 命 令 设 置 的 。 DWORD GetEnvironmentVariable(LPCSTR lpName, LPSTR lpBuffer, DWORD dSize), 参 数 lpName 是 你 要 求 查 询
5、 的 环 境 变 量 的 名 , lpBuffer 是返 回 你 所 指 定 的 环 境 变 量 的 值 的 , dSize 是 告 诉 这 个 函 数 lpBuffer 可 以 存放 多 少 个 字 节 . 分 析 本 地 故 障 时 原 因 很 可 能 就 是 因 为 环 境 变 量 中 的 默 认 路 径 被 删 除 的 结果 , 默 认 路 径 一 经 设 置 , 当 前 系 统 如 有 程 序 运 行 时 需 要 某 些 DLL 或 EXE 文件 , 以 及 Active 控 件 时 就 会 到 所 有 默 认 路 径 中 去 查 找 , 如 果 在 这 些 目 录 中查 找 到 相
6、 应 的 程 序 则 自 动 加 载 , 查 找 不 到 则 报 告 缺 少 某 某 文 件 的 错 误 信 息 。编 辑 本 段 环 境 变 量 的 作 用解 决 双 系 统 的 软 件 共 用 问 题很 多 朋 友 会 在 自 己 的 计 算 机 上 安 装 双 系 统 , 例 如 C 盘 安 装 Windows 98, D 盘 安 装 Windows XP。 可 是 某 些 软 件 往 往 只 在 Windows 98 系 统 中 安 装 ,Windows XP 系 统 中 是 无 法 正 常 使 用 的 , 比 较 麻 烦 却 有 效 的 方 法 是 再 安 装 一 遍 。当 我 们
7、了 解 了 环 境 变 量 中 的 用 途 后 就 可 以 很 好 解 决 双 系 统 的 软 件 共 用 问 题 。 解 决 系 统 运 行 问 题为 什 么 在 Windows 98 中 安 装 了 的 软 件 在 Windows XP 下 无 法 运 行 呢 (绿色 软 件 除 外 )?原 因 是 安 装 软 件 时 往 往 须 要 向 系 统 目 录 中 复 制 某 些 文 件 , 而 使用 另 外 一 个 系 统 时 会 由 于 缺 少 这 些 文 件 而 无 法 运 行 。 因 此 , 我 们 可 以 通 过 设置 环 境 变 量 的 方 法 来 解 决 这 个 问 题 。 编 辑
8、 本 段 环 境 变 量 设 置 方 法在 windows 操 作 系 统 中 可 以 通 过 我 的 电 脑 - 属 性 - 高 级 , 来 设 置 系统 的 环 境 变 量 , 然 而 在 此 设 置 的 环 境 变 量 是 否 在 注 册 表 中 具 有 对 应 的 项 呢 ?答 案 是 肯 定 的 。 而 在 .net 中 提 供 了 一 个 类 来 获 取 系 统 的 环 境 变 量 及 其 值 。 环 境 变 量 分 为 两 类 : 用 户 变 量 与 系 统 变 量 , 在 注 册 表 中 都 有 对 应 的 项 。其 中 用 户 变 量 所 在 位 置 : HKEY_CURRE
9、NT_USEREnvironment; 系 统 变 量 所 在 位 置 为 : HKEY_LOCAL_MACHINESYSTEMControlSet001 ControlSession ManagerEnvironment。 另 外 也 可 以 右 击 我 的 电 脑 高 级 环 境 变 量 在 系 统 变 量 里 有path 选 项 双 击 打 开 在 原 有 变 量 的 基 础 上 添 加 英 文 状 态 下 的 分 号 然 后 将 路 径 名 输 入 即 可 。 ( 切 记 , 不 要 删 除 原 先 的 系 统 变 量 , 只 要 用 分 号隔 开 , 然 后 添 加 ) 编 辑 本
10、段 常 见 环 境 变 量%ALLUSERSPROFILE% 局 部 返 回 所 有 “用 户 配 置 文 件 ”的 位 置 。 %APPDATA% 局 部 返 回 默 认 情 况 下 应 用 程 序 存 储 数 据 的 位 置 。 %CD% 局 部 返 回 当 前 目 录 字 符 串 。 %CMDCMDLINE% 局 部 返 回 用 来 启 动 当 前 的 Cmd.exe 的 准 确 命 令 行 。 %CMDEXTVERSION% 系 统 返 回 当 前 的 “命 令 处 理 程 序 扩 展 ”的 版 本 号 。 %COMPUTERNAME% 系 统 返 回 计 算 机 的 名 称 。 %C
11、OMSPEC% 系 统 返 回 命 令 行 解 释 器 可 执 行 程 序 的 准 确 路 径 。 %DATE% 系 统 返 回 当 前 日 期 。 使 用 与 date /t 命 令 相 同 的 格 式 。 由 Cmd.exe 生 成 。 有 关 date 命 令 的 详 细 信 息 , 请 参 阅 Date。 %ERRORLEVEL% 系 统 返 回 最 近 使 用 过 的 命 令 的 错 误 代 码 。 通 常 用 非 零 值表 示 错 误 。 %HOMEDRIVE% 系 统 返 回 连 接 到 用 户 主 目 录 的 本 地 工 作 站 驱 动 器 号 。 基于 主 目 录 值 的 设
12、 置 。 用 户 主 目 录 是 在 “本 地 用 户 和 组 ”中 指 定 的 。 %HOMEPATH% 系 统 返 回 用 户 主 目 录 的 完 整 路 径 。 基 于 主 目 录 值 的 设 置 。用 户 主 目 录 是 在 “本 地 用 户 和 组 ”中 指 定 的 。 %HOMESHARE% 系 统 返 回 用 户 的 共 享 主 目 录 的 网 络 路 径 。 基 于 主 目 录 值的 设 置 。 用 户 主 目 录 是 在 “本 地 用 户 和 组 ”中 指 定 的 。 %LOGONSEVER% 局 部 返 回 验 证 当 前 登 录 会 话 的 域 控 制 器 的 名 称 。
13、 %NUMBER_OF_PROCESSORS% 系 统 指 定 安 装 在 计 算 机 上 的 处 理 器 的 数 目 。%OS% 系 统 返 回 操 作 系 统 的 名 称 。 Windows 2000 将 操 作 系 统 显 示 为 Windows_NT。 %PATH% 系 统 指 定 可 执 行 文 件 的 搜 索 路 径 。 %PATHEXT% 系 统 返 回 操 作 系 统 认 为 可 执 行 的 文 件 扩 展 名 的 列 表 。 %PROCESSOR_ARCHITECTURE% 系 统 返 回 处 理 器 的 芯 片 体 系 结 构 。 值 : x86, IA64。 %PROCE
14、SSOR_IDENTFIER% 系 统 返 回 处 理 器 说 明 。 %PROCESSOR_LEVEL% 系 统 返 回 计 算 机 上 安 装 的 处 理 器 的 型 号 。 %PROCESSOR_REVISION% 系 统 返 回 处 理 器 修 订 号 的 系 统 变 量 。 %PROMPT% 局 部 返 回 当 前 解 释 程 序 的 命 令 提 示 符 设 置 。 由 Cmd.exe 生 成 。 %RANDOM% 系 统 返 回 0 到 32767 之 间 的 任 意 十 进 制 数 字 。 由 Cmd.exe 生 成 。 %SYSTEMDRIVE% 系 统 返 回 包 含 Win
15、dows XP 根 目 录 ( 即 系 统 根 目 录 )的 驱 动 器 。 %SYSTEMROOT% 系 统 返 回 Windows XP 根 目 录 的 位 置 。 %TEMP% and %TMP% 系 统 和 用 户 返 回 对 当 前 登 录 用 户 可 用 的 应 用 程 序所 使 用 的 默 认 临 时 目 录 。 有 些 应 用 程 序 需 要 TEMP, 而 其 它 应 用 程 序 则 需 要 TMP。 %TIME% 系 统 返 回 当 前 时 间 。 使 用 与 time /t 命 令 相 同 的 格 式 。 由 Cmd.exe 生 成 。 有 关 time 命 令 的 详
16、细 信 息 , 请 参 阅 Time。 %USERDOMAIN% 局 部 返 回 包 含 用 户 帐 户 的 域 的 名 称 。 %USERNAME% 局 部 返 回 当 前 登 录 的 用 户 的 名 称 。 %UserPrefix% 局 部 返 回 当 前 用 户 的 配 置 文 件 的 位 置 。 %WINDIR% 系 统 返 回 操 作 系 统 目 录 的 位 置 。 编 辑 本 段 在 命 令 行 中 对 环 境 变 量 进 行 编 辑 的 方 法查 看 当 前 可 用 的 所 有 环 境 变 量 ( 系 统 变 量 用 户 变 量 ) set 查 看 某 个 环 境 变 量 , 如
17、 PATH set PATH 添 加 环 境 变 量 , 如 xxx=aa set xxx=aa 将 环 境 变 量 ( 如 xxx) 的 值 置 为 空 set xxx= 在 某 个 环 境 变 量 ( 如 PATH) 后 添 加 新 的 值 ( 如 d:xxx) set PATH=%PATH%;d:xxx ( 注 : 在 dos 窗 口 中 以 命 令 行 方 式 对 环 境 变 量 的 操 作 只 对 当 前 窗 口 的 应用 有 效 ) 编 辑 本 段 Linux 下 的 环 境 变 量shell 环 境 依 赖 于 多 个 文 件 的 设 置 。 当 shell 被 调 用 时 ,
18、它 从 两 个 初 始文 件 读 取 命 令 。 /etc/profile 包 含 了 系 统 变 量 , 它 由 系 统 管 理 员 维 护 , 由系 统 管 理 用 设 置 本 地 系 统 变 量 和 特 殊 命 令 。 普 通 用 户 的 启 动 信 息 文 件($HOME/.bash_project)由 各 用 户 自 己 维 护 , 该 文 件 可 以 被 修 改 以 实 现 任 何特 定 的 系 统 初 始 化 。 只 有 在 特 定 的 情 况 下 才 读 取 profile 文 件 , 确 切 的 说 是 在 用 户 登 陆 的时 候 。 当 运 行 shell 脚 本 或 s
19、ubshell 以 后 , 就 无 须 再 读 profile.虽 然 所有 profile 都 可 选 的 , 但 是 基 本 上 所 有 系 统 都 有 /etc/profile. 如 果 定 义 了 变 量 ENV 且 已 经 传 递 到 环 境 中 没 所 有 的 bash shell 都 要 读取 并 调 用 由 这 个 变 量 制 定 的 文 件 所 包 含 的 命 令 。 这 个 文 件 用 来 定 义 所 有bash shell 的 特 征 , 而 不 仅 仅 是 登 陆 到 shell。 这 个 文 件 的 典 型 的 名 字 是$HOME/,bashrc。 当 用 ( 系
20、统 管 理 员 ) 新 建 用 户 时 , .bash_profile、 bashrc 和 其 他 公共 的 环 境 文 件 模 板 将 复 制 到 /etc/skel 这 个 目 录 下 面 。 可 以 编 辑 这 些 初 始 化设 置 , 也 可 以 在 此 目 录 下 添 加 附 加 的 文 件 。 Example: 一 个 典 型 的 系 统 profile(/etc/profile): PATH=$PATH:/usr/qa/tools/bin ENV=$HOME/.bashrc ORACLE_HOME=/dbs/oracle ORACLE_SID=qadb Export PATH E
21、NV ORACLE_HOME ORCAL_SID Cat /etc/motd 一 个 典 型 的 用 户 profile(.bashrc) PATH=$PATH:$HOME/bin TEAM=uvt1224 export TERM stty intr C cal mesg n 一 个 典 型 的 用 户 bashrc file (.bashrc): alias dir=ls lf=ls -FC PSI=$PWS! set -o vi 别 名 和 其 他 bash 专 用 的 定 义 应 该 放 在 .bashrc 文 件 ( 不 应 在 .bash_profile) 中 定 义 ; 否 则 会
22、 导 致 找 不 到 某 些 命 令 。 应 该 记 住 profile 文 件 和 .bashrc 文 件 的 区 别 : 两 个 profile 都 只 在系 统 启 动 时 被 读 取 一 次 , 而 .bashrc 在 系 统 启 动 和 每 次 调 用 shell 的 时 候都 要 被 读 取 。GNU/Linux 下面每个程序运行都有一个所谓的运行环境,这里的环境实际上就是一组变量的定义。所有的变量和他们的值都是字符串形式表达的。通过转换,通常变量名字都是用大写字符表达。 对于环境变量大家都不陌生,例如,我们都很熟悉的 HOME 这个环境变量,这个变量指示的当前用户的个人用户目录的
23、路径。又例如,PATH 这个环境变量,它指示出当前 Linux系统搜索的的执行文件的路径列表。 对于我们在 Linux 下常用的 BASH 这个 shell 程序,它有自己的一套管理环境变量的方法。例如,通过$NAME 来访问相应的环境变量,通过 export 来设置环境变量,下面是一个实例: hwanglangchao linuxprogram$ echo $HOME /home/hwang hwanglangchao linuxprogram$ export MYNAME=“Luster“ hwanglangchao linuxprogram$ echo $MYNAME Luster hw
24、anglangchao linuxprogram$ 而在我们的应用程序里面,如果需要访问一个环境变量,我们可以通过 getenv()这个函数来实现,getenv 这个函数在这个头文件中声明。这个函数的输入参数是需要访问的变量名字,得到的返回值是一个字符串,如果所访问的环境变量没有设置,则会返回 NULL。如果需要在程序里面设置某个环境变量,则可以使用 setenv 这个函数,如果是要清除某个特定的环境变量,则使用 unsetenv 这个函数。它们的函数原型如下: #include char *getenv(const char *name); int setenv(const char *na
25、me, const char *value, int overwrite); void unsetenv(const char *name); 值得一提的是,GNU C 函数库里面有一个特殊的全局的变量,名字叫做 environ,这个变量的类型是 char *,它所指向的是所有的环境变量的一个列表,最后是以 NULL 结尾。每个字符串都是“VALUE=value”这样的形式。例如下面的程序可以打印出当前运行环境里面的所有的环境变量: #include extern char*environ; int main () char*var; for (var =environ;*var !=NULL
26、;+var) printf (“%s n “,*var); return 0; 注意,如果你需要修改某个环境变量,不要直接修改 environ 这个变量,而应该使用 setenv或者 unsetenv 这样的管理函数来做这件事情。 一般来说,当一个程序启动的时候,它就会拷贝一份启动它的“父”程序所拥有的环境变量。环境变量是 GNU 程序常用来配置某个应用程序的行为的一个方法,例如,通过环境变量来设置 HTTP 代理服务器的地址和端口号等等。下面是一段代码的演示: #include #include int main () char *server_name =getenv (“SERVER_NAME ”); if (server_name =NULL) server_name =“server.my- ”; printf (“accessing server %s n ”,server_name); return 0;