Man page - environ(7)

Packages contains this manual

Available languages:

en fr it pl ja ro zh_TW zh_CN de

Manual

environ

名 稱
概 述
描 述
備 註
缺 陷
參 見


名 稱

environ - 使 用 者 環 境

概 述

extern char ** environ ;

描 述

變 數 environ 指 向 一 個 儲 存 指 標 的 陣 列 , 這 些 指 標 指 向 被 稱 為 “環 境 ( environment) ”的 字 串 。 陣 列 中 最 後 一 個 指 標 的 值 為 NULL。 該 字 串 陣 列 在 新 程 式 啟 動 時 被 execve (2) 呼 叫 提 供 給 程 序 。 當 子 程 序 被 fork (2) 建 立 時 , 它 繼 承 其 父 程 序 環 境 的 一 份 副 本

習 慣 上 約 定 在 environ 中 的 字 串 有 類 似 “ 名 稱 = ”的 形 式 。 其 中 的 名 稱 是 大 小 寫 敏 感 的 , 且 不 能 包 含 字 元 “ = ”。 其 中 的 值 可 以 為 任 何 字 串 可 以 表 示 的 文 字 。 名 稱 和 值 不 能 包 含 內 嵌 的 空 位 元 組 字 元 ( '\0') , 以 此 避 免 其 被 誤 認 為 字 串 終 止 位 置 。

環 境 變 數 可 由 sh (1) 中 的 export 命 令 在 shell 的 環 境 中 被 設 定 , 或 者 在 使 用 csh (1) 時 使 用 setenv 命 令 。

對 shell 來 說 , 其 初 始 的 環 境 相 關 變 數 可 經 由 多 種 方 式 被 填 充 , 如 在 使 用 了 pam (8) 的 系 統 上 , pam_env (8) 會 對 所 有 使 用 者 在 登 入 時 啟 用 /etc/environment 中 的 定 義 。 除 此 之 外 , 許 多 shell 初 始 化 指 令 碼 , 如 系 統 層 級 的 /etc/profile 指 令 碼 和 各 個 使 用 者 的 初 始 化 指 令 碼 , 可 能 包 含 一 些 會 向 shell 的 環 境 中 新 增 變 數 的 命 令 ; 請 參 考 您 使 用 的 shell 的 手 冊 頁 瞭 解 詳 細 資 訊 。

Bourne 風 格 的 shell 支 援 下 面 的 語 法

名 稱 =值 命 令

它 可 被 用 來 僅 在 執 行 命 令 時 建 立 對 應 的 環 境 變 數 定 義 。 在 命 令 之 前 , 可 以 存 在 多 個 變 數 定 義 , 其 間 使 用 空 格 進 行 分 隔 。

引 數 還 可 以 在 呼 叫 exec (3)時 被 放 置 於 環 境 之 中 。 C 程 式 可 以 使 用 諸 如 getenv (3), putenv (3), setenv (3) 和 unsetenv (3) 的 函 式 操 縱 其 環 境 。

本 文 的 下 述 部 分 列 出 了 系 統 上 常 見 的 環 境 變 數 。 這 個 列 表 並 不 完 整 , 且 僅 包 含 普 通 使 用 者 在 日 常 使 用 中 常 見 的 變 數 。 特 定 程 式 或 軟 體 庫 函 式 所 使 用 的 環 境 變 數 通 常 會 在 其 對 應 的 手 冊 頁 中 的 “環 境 ”一 節 中 進 行 描 述 。

USER

已 登 入 使 用 者 的 名 稱 ( 被 某 些 BSD 衍 生 的 程 式 所 使 用 ) 。 其 在 登 入 時 被 設 定 , 請 見 下 文 的 備 註 一 節 。

LOGNAME

已 登 入 使 用 者 的 名 稱 ( 被 某 些 System-V 衍 生 的 程 式 所 使 用 ) 。 其 在 登 入 時 被 設 定 , 請 見 下 文 的 備 註 一 節 。

HOME

使 用 者 登 入 時 的 目 錄 。 其 在 登 入 時 被 設 定 , 請 見 下 文 的 備 註 一 節 。

LANG

用 於 語 言 和 區 域 設 定 類 別 的 名 稱 , 它 在 未 被 LC_ALL 或 更 具 體 的 環 境 變 數 , 如 LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC LC_TIME 所 覆 蓋 時 生 效 ( 請 參 見 locale (7) 以 瞭 解 LC_* 環 境 變 數 的 具 體 細 節 ) 。

PATH

它 是 一 系 列 目 錄 字 首 , 可 被 sh (1) 和 許 多 其 他 程 式 所 使 用 以 搜 尋 由 簡 單 的 檔 名 ( 即 不 含 有 斜 線 的 路 徑 名 ) 所 指 定 的 可 執 行 檔 案 。 各 個 字 首 之 間 被 冒 號 ( : ) 所 分 隔 。 整 個 字 首 列 表 會 被 從 前 到 後 進 行 搜 尋 , 程 式 會 檢 查 給 定 路 徑 名 在 附 加 字 首 、 斜 線 和 檔 名 之 後 的 路 徑 是 否 存 在 , 直 到 找 到 一 個 符 合 條 件 的 可 執 行 檔 案 為 止 。

還 存 在 一 個 遺 留 的 特 性 : 如 果 字 首 長 度 為 零 ( 即 由 兩 個 相 鄰 的 冒 號 組 成 , 或 者 有 起 始 或 終 止 位 置 的 冒 號 存 在 ) , 該 字 首 會 被 解 釋 為 指 定 當 前 工 作 目 錄 。 然 而 , 當 前 已 不 推 薦 使 用 該 特 性 , 且 POSIX 認 為 一 個 符 合 標 準 的 應 用 程 式 應 當 使 用 顯 式 的 路 徑 名 ( 如 . ) 來 指 定 當 前 工 作 目 錄 。

類 似 PATH , 還 存 在 CDPATH 會 被 某 些 shell 用 來 尋 找 更 改 目 錄 指 令 的 目 標 目 錄 , 以 及 被 man (1) 所 使 用 尋 找 手 冊 頁 的 MANPATH , 等 等 。

PWD

當 前 工 作 目 錄 的 絕 對 路 徑 。 它 的 組 成 部 分 必 須 被 規 範 化 ( 即 不 可 出 現 . .. 的 路 徑 部 分 ) 。

SHELL

使 用 者 登 入 shell 的 絕 對 路 徑 名 。 其 在 登 入 時 被 設 定 , 請 見 下 文 的 備 註 一 節 。

TERM

輸 出 應 當 相 容 的 終 端 型 別 。

PAGER

使 用 者 偏 好 的 顯 示 文 字 檔 案 的 實 用 工 具 。 可 被 設 定 為 任 何 sh -c 命 令 可 接 受 的 命 令 字 串 運 算 子 。 如 果 PAGER 的 值 為 空 或 未 被 設 定 , 則 啟 動 分 頁 器 的 應 用 程 式 會 預 設 選 擇 一 個 程 式 , 如 less (1) 或 more (1)。

EDITOR / VISUAL

使 用 者 偏 好 使 用 的 編 輯 文 字 檔 案 的 工 具 。 可 被 設 定 為 任 何 sh -c 命 令 可 接 受 的 命 令 字 串 運 算 子 。

請 注 意 , 許 多 程 式 和 軟 體 庫 例 程 的 行 為 都 會 受 到 特 定 環 境 變 數 存 在 與 否 及 其 取 值 的 影 響 。 下 面 給 出 一 些 例 子 :

LANG , LANGUAGE , NLSPATH , LOCPATH , LC_ALL , LC_MESSAGES 等 等 變 數 會 影 響 語 言 和 區 域 設 定 的 處 理 ; 請 參 見 catopen (3), gettext (3) 和 locale (7)。

TMPDIR 影 響 由 tempnam (3) 和 其 他 例 程 建 立 的 路 徑 名 稱 的 字 首 , 以 及 由 sort (1) 和 其 他 程 式 所 使 用 的 臨 時 目 錄 名 。

LD_LIBRARY_PATH , LD_PRELOAD 和 其 他 LD_* 變 數 會 影 響 動 態 載 入 器 /連 結 器 的 行 為 。 請 參 見 ld.so (8)。

POSIXLY_CORRECT 使 得 特 定 的 程 式 和 軟 體 庫 例 程 遵 循 POSIX 所 指 定 的 行 為 。

malloc (3) 的 行 為 受 到 MALLOC_* 變 數 的 影 響 。

HOSTALIASES 變 數 給 出 包 含 gethostbyname (3) 將 要 使 用 的 主 機 別 名 的 檔 案 的 名 稱 。

TZ TZDIR 給 出 tzset (3) 所 使 用 的 時 區 資 訊 , 並 涉 及 諸 如 ctime (3), localtime (3), mktime (3), strftime (3) 等 函 式 。 另 請 參 見 tzselect (8)。

TERMCAP 提 供 如 何 處 理 給 定 終 端 的 相 關 資 訊 ( 或 者 給 出 包 含 這 些 資 訊 的 檔 案 的 檔 名 )

COLUMNS LINES 會 告 知 應 用 程 式 視 窗 大 小 資 訊 , 它 可 能 會 覆 蓋 實 際 大 小 的 配 置 。

PRINTER LPDEST 可 能 指 定 要 使 用 的 印 表 機 。 請 見 lpr (1)。

備 註

歷 史 上 以 及 標 準 上 , environ 必 須 被 使 用 者 程 式 所 宣 告 。 然 而 , 一 個 現 存 的 不 標 準 的 方 便 程 式 設 計 師 工 作 的 方 法 是 將 environ 宣 告 在 <unistd.h> 標 頭 檔 案 中 , 前 提 是 _GNU_SOURCE 功 能 測 試 宏 已 被 定 義 ( 參 見 feature_test_macros (7)) 。

prctl (2) 中 的 PR_SET_MM_ENV_START PR_SET_MM_ENV_END 操 作 可 被 用 來 控 制 程 序 環 境 的 位 置 。

HOME , LOGNAME , SHELL USER 變 數 會 在 使 用 者 經 由 會 話 管 理 介 面 被 變 更 時 被 設 定 。 者 通 常 是 經 由 類 似 login (1) 的 程 式 以 及 使 用 者 資 料 庫 ( 例 如 passwd (5)) 所 完 成 的 。 ( 使 用 su (1) 切 換 到 root 使 用 者 可 能 導 致 混 合 的 環 境 變 數 , 其 中 LOGNAME USER 被 保 留 為 舊 有 使 用 者 的 值 ; 參 見 su (1) 手 冊 頁 。 )

缺 陷

很 顯 然 , 這 個 機 制 有 安 全 風 險 。 許 多 系 統 命 令 可 被 使 用 者 指 定 的 不 同 尋 常 的 IFS LD_LIBRARY_PATH 的 值 所 欺 騙 。

還 存 在 名 稱 空 間 汙 染 的 風 險 。 如 make autoconf 等 程 式 允 許 環 境 中 具 有 和 實 用 工 具 相 同 命 名 ( 但 全 大 寫 ) 的 變 數 覆 蓋 預 設 所 使 用 的 工 具 路 徑 。 因 此 , 使 用 者 可 以 使 用 CC 來 選 擇 想 要 使 用 的 C 編 譯 器 ( 類 似 地 , 還 有 MAKE , AR , AS , FC , LD , LEX , RM , YACC 等 等 ) 。 然 而 , 在 某 些 傳 統 的 使 用 場 景 中 這 些 環 境 變 數 還 會 被 賦 值 為 程 式 選 項 而 非 路 徑 名 , 例 如 MORE LESS 。 這 些 用 法 被 認 為 是 錯 誤 的 , 應 當 在 新 程 式 中 避 免 。

參 見

bash (1), csh (1), env (1), login (1), printenv (1), sh (1), su (1), tcsh (1), execve (2), clearenv (3), exec (3), getenv (3), putenv (3), setenv (3), unsetenv (3), locale (7), ld.so (8), pam_env (8)

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。
中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh