Manpages

______________________________________________________________________________

NAME

exec - 調 用 子 進 程

總 覽 SYNOPSIS

exec ?switches? arg ?arg ...? _________________________________________________________________

描 述 DESCRIPTION

這 個 命 令 把 它 的 參 數 作 爲 對 要 執 行 的 一 個 或 多 個 子 進 程 的 指 定 來 對 待 。 參 數 接 受 標 準 的 shell 管 道 的 格 式 (form), 即 每 個 arg 都 變 成 某 個 命 令 的 一 個 字 , 並 且 每 個 不 同 的 命 令 都 變 成 一 個 子 進 程 。 如 果 給 exec的 初 始 的 參 數 以 - 開 始 , 則 它 們 被 作 爲 命 令 行 開 關 而 不 是 管 道 指 定 的 一 部 分 來 對 待 。 當 前 支 持 下 列 開 關 :

-keepnewline 在 管 道 的 輸 出 中 保 持 尾 隨 的 換 行 符 。 通 常 要 刪 除 尾 隨 的 換 行 符 。

-- 標 誌 開 關

(部 分 )的 結 束 。 此 後 的 參 數 即 使 以 -開 頭 仍 被 作 爲 第 一 個 arg 來 對 待 。 如 果 一 個 arg (或 成 對 的 arg)有 象 下 面 描 述 的 格 式 個 某 一 種 , 則 exec 用 它 來 控 制 子 進 程 間 的 輸 入 和 輸 出 流 (flow)。 將 不 把 這 樣 的 參 數 傳 遞 給 子 進 程 。 在 象 “< fileName”這 樣 的 格 式 中 fileName 可 以 要 麼 是 一 個 與 “<”分 離 的 參 數 , 要 麼 是 在 同 一 個 參 數 中 而 沒 有 間 隔 的 空 格 (例 如 “<fileName”)。

| 分 隔 在 管 道 中 不 同 的 命 令 。 前 面 的 命 令 的 標 準 輸 出 將 被 輸 送 給 後 面 命 令 的 標 準 輸 入 中 。

|& 分 隔 在 管 道 中 不 同 的 命 令 。 前 面 命 令 的 標 準 輸 出 和 標 準 錯 誤 輸 出 都 被 輸 送 到 後 面 的 標 準 輸 入 中 。 這 種 重 定 向 格 式 取 代 象

2> 和 >& 這 樣 的 格 式 。

< fileName 打 開 由

fileName 指 名 的 文 件 並 作 爲 在 管 道 中 的 第 一 個 命 令 的 標

準 輸 入 來 使 用 。

<@ fileId

FileId 必 須 是 一 個 打 開 了 的 文 件 的 標 識 符 , 比 如 是 從 以 前 的 open 調 用 的 返 回 值 。 作 爲 在 管 道 中 的 第 一 個 命 令 的 標 準 輸 入 來 使 用 。 FileId 必 須 用 讀 模 式 來 打 開 。

<< value

Value 被 傳 遞 給 第 一 個 命 令 來 作 爲 它 的 標 準 輸 入 。

> fileName

最 後 的 命 令 的 標 準 輸 出 被 重 定 向 到 叫 fileName 的 文 件 中 , 覆 蓋 它 以 前 的 內 容 。

2> fileName

把 管 道 中 所 有 命 令 的 標 準 錯 誤 輸 出 重 定 向 到 叫 fileName 的 文 件 中 , 覆 蓋 它 以 前 的 內 容 。

> & fileName

最 後 的 命 令 的 標 準 輸 出 和 所 有 命 令 的 標 準 錯 誤 輸 出 都 被 重 定 向 到 叫 fileName的 文 件 中 , 覆 蓋 它 以 前 的 內 容 。

>> fileName 最 後

的 命 令 的 標 準 輸 出 被 重 定 向 到 叫 fileName 的 文 件 中 , 對 它 進 行 添 加 而 不 是 覆 蓋 它 。

2>> fileName

在 管 道 中 的 所 有 的 命 令 的 標 準 錯 誤 輸 出 都 被 重 定 向 到 叫 fileName的 文 件 中 , 對 它 進 行 添 加 而 不 是 覆 蓋 它 。

>> & fileName

最 後 的 命 令 的 標 準 輸 出 和 所 有 命 令 的 標 準 錯 誤 輸 出 被 重 定 向 到 叫 fileName 的 文 件 中 , 對 它 進 行 添 加 而 不 是 覆 蓋 它 。
> @ fileId

FileId 必 須 是 一 個 打 開 了 的 文 件 的 標 識 符 , 比 如 是 從 以 前 的 open調 用 的 返 回 值 。 最 後 的 命 令 的 標 準 輸 出 被 重 定 向 到 fileId(指 定 )的 文 件 中 。 文 件 必 須 用 讀 模 式 來 打 開 。

2>@ fileId

FileId 必 須 是 一 個 打 開 了 的 文 件 的 標 識 符 , 比 如 是 從 以 前 的 open調 用 的 返 回 值 。 在 管 道 中 的 所 有 命 令 的 標 準 錯 誤 輸 出 都 被 重 定 向 到 fileId(指 定 )的 文 件 中 。 文 件 必 須 用 寫 模 式 來 打 開 。

> &@ fileId

FileId 必 須 是 一 個 打 開 了 的 文 件 的 標 識 符 , 比 如 是 從 以 前 的 open調 用 的 返 回 值 。 最 後 的 命 令 的 標 準 輸 出 和 所 有 命 令 的 標 準 錯 誤 輸 出 被 重 定 向 到 fileId(指 定 )的 文 件 中 。 文 件 必 須 用 寫 模 式 來 打 開 。

如 果 標 準 輸 出 沒 有 被 重 定 向 , 則 exec 命 令 返 回 在 管 道 中 最 後 的 命 令 的 標 準 輸 出 。 如 果 在 管 道 中 的 任 何 命 令 不 正 常 退 出 或 被 殺 死 或 被 掛 起 , 則 exec 將 返 回 一 個 錯 誤 和 並 且 錯 誤 信 息 將 包 含 管 道 的 輸 出 和 隨 後 的 描 述 不 正 常 終 止 的 錯 誤 信 息 ; errorCode 變 量 將 包 括 關 於 最 近 所 遭 遇 的 不 正 常 終 止 的 額 外 的 信 息 。 如 果 任 何 命 令 寫 它 的 標 準 錯 誤 文 件 而 這 個 標 準 錯 誤 未 被 重 定 向 , 則 exec 將 返 回 一 個 錯 誤 ; 錯 誤 消 息 將 包 含 管 道 的 標 準 輸 出 , 跟 着 是 關 於 不 正 常 終 止 的 信 息 (如 果 有 的 話 ), 隨 後 是 標 準 錯 誤 輸 出 。 如 果 結 果 或 錯 誤 信 息 的 最 後 的 字 符 是 一 個 換 行 符 , 則 這 個 換 行 符 通 常 被 從 結 果 或 錯 誤 信 息 中 刪 除 。 這 是 與 其 他 Tcl 返 回 值 相 一 致 的 , 它 們 通 常 不 用 換 行 (作 爲 )結 束 。 但 是 , 如 果 指 定 了 -keepnewline則 保 持 尾 隨 的 換 行 符 。 如 果 標 準 輸 入 未 使 用 “<” 、 “<<” 或 “<@” 來 重 定 向 , 則 把 應 用 的 當 前 的 標 準 輸 入 作 爲 第 一 個 命 令 的 標 準 輸 入 。 如 果 最 後 的 arg 是 “&”, 則 管 道 將 在 後 臺 執 行 。 在 這 種 情 況 下 exec命 令 將 返 回 一 個 列 表 , 列 表 的 元 素 是 在 管 道 中 所 有 子 進 程 的 進 程 標 識 符 。 如 果 在 管 道 中 最 後 的 命 令 的 標 準 輸 出 未 被 重 定 向 , 則 輸 出 到 應 用 的 標 準 輸 出 中 , 並 且 如 果 管 道 中 所 有 的 命 令 的 錯 誤 輸 出 未 被 重 定 向 , 則 錯 誤 輸 出 到 應 用 的 標 準 錯 誤 中 。 每 個 命 令 中 的 第 一 個 字 被 接 受 爲 命 令 的 名 字 ; 在 它 上 面 進 行 “~”(tilde)替 換 , 如 果 結 果 不 包 含 斜 槓 , 則 在 PATH 環 境 變 量 中 的 目 錄 裏 查 找 給 定 名 字 的 可 執 行 文 件 。 如 果 名 字 包 含 斜 槓 , 則 它 必 須 參 照 一 個 從 當 前 目 錄 可 到 達 的 可 執 行 文 件 。 在 給 命 令 的 參 數 上 不 進 行 通 配 符 (glob) 擴 展 或 其 他 的 shell 式 的 替 換 。

移 植 要 點 PORTABILITY ISSUES

Windows (所 有 版 本 ) 從 /向 一 個 套 接 口 讀 或 寫 , 使 用 “@ fileId”記 號 (notation), 不 能 工 作 。 在 從 一 個 套 接 口 讀 的 時 候 , 一 個 16位 DOS 應 用 程 序 將 掛 起 (hang) 而 一 個 32位 應 用 程 序 將 立 即 返 回 文 件 結 束 (end-of-file)。 在 任 意 類 型 的 應 用 向 一 個 套 接 口 寫 的 時 候 , 如 果 控 制 檯 存 在 的 話 , 信 息 轉 而 發 送 到 控 制 檯 , 否 則 就 丟 棄 信 息 。

Tk 控 制 檯 文 本 組 件 不 提 供 真 實 的 標 準 IO 功 能 。 在 Tk 下 , 從 標 準 輸 入 重 定 向 的 時 候 , 所 有 的 應 用 將 看 到 一 個 立 即 的 文 件 結 束 ; 重 定 向 到 標 準 輸 出 或 標 準 錯 誤 輸 出 的 信 息 將 被 丟 棄 。 要 麼 是 正 斜 槓 要 麼 是 反 斜 槓 被 接 受 爲 給 Tcl 命 令 的 參 數 的 路 徑 分 隔 符 。 在 執 行 一 個 應 用 的 時 候 , 對 應 用 的 路 徑 名 指 定 也 可 以 包 含 正 或 反 斜 槓 作 爲 路 徑 分 隔 符 。 但 是 必 須 記 住 , 多 數 Windows 應 用 接 受 有 正 斜 槓 的 參 數 作 爲 選 項 分 界 符 (delimiter)而 反 斜 槓 只 在 路 徑 中 。 指 定 了 有 正 斜 槓 的 一 個 路 徑 名 的 給 應 用 的 任 何 參 數 將 不 被 自 動 的 轉 換 成 使 用 反 斜 槓 字 符 。 如 果 一 個 參 數 包 括 作 爲 路 徑 分 隔 符 的 正 斜 槓 , 它 可 以 被 識 別 成 路 徑 名 , 也 可 以 不 被 識 別 成 路 徑 名 , 這 依 賴 於 (具 體 )程 序 。 額 外 的 , 在 調 用 一 個 16位 DOS 或 Windows 3.X 應 用 時 , 所 有 路 徑 名 必 須 使 用 短 的 、 神 祕 的 (cryptic)的 路 徑 格 式 (例 如 , 使 用 “applba~1.def”來 替 代 “applbakery.default”)。 在 一 個 路 徑 中 在 一 行 的 兩 個 或 更 多 的 正 或 反 斜 槓 參 照 一 個 網 絡 路 徑 。 例 如 , 根 目 錄 c:/ 和 一 個 子 目 錄 /windows/system的 一 個 簡 單 的 連 接 將 產 c://windows/system (兩 個 斜 槓 在 一 起 ), 這 參 照 的 是 在 叫 windows 的 那 臺 機 器 上 的 叫 system 的 掛 裝 點 (而 c:/ 被 忽 略 ), 這 並 不 等 價 於 c:/windows/system, 它 描 述 的 是 在 當 前 計 算 機 上 的 一 個 目 錄 。 應 使 用 file join 命 令 來 連 接 路 徑 的 成 員 。

Windows NT 在 嘗 試 執 行 一 個 應 用 時 , exec 首 先 查 找 指 定 的 那 個 名 字 。 接 着 按 .com .exe, 和 .bat 的 次 序 把 它 們 添 加 到 指 定 的 名 字 的 後 面 並 查 找 這 個 加 長 了 的 名 字 。 如 果 沒 有 指 定 一 個 目 錄 名 作 爲 應 用 (程 序 )名 的 一 部 分 , 在 嘗 試 定 位 應 用 (程 序 )時 , 依 次 在 下 列 目 錄 中 自 動 查 找 : 裝 載 Tcl 可 執 行 文 件 的 目 錄 。 當 前 目 錄

Windows NT 32位 系 統 目 錄 。
Windows NT 16位 系 統 目 錄 。
Windows NT 主 目 錄 。 在 path 中 列 出 的 目 錄 。 要 執 行 shell 內 置 命 令 象 dircopy, 調 用 者 必 須 爲 想 用 的 命 令 加 上 cmd.exe /c ”前 導 (prepend)。

Windows 95 在 嘗 試 執 行 一 個 應 用 時 , exec首 先 查 找 指 定 的 那 個 名 字 。 接 着 按 .com .exe, 和 .bat 的 次 序 把 它 們 添 加 到 指 定 的 名 字 的 後 面 並 查 找 這 個 加 長 了 的 名 字 。 如 果 沒 有 指 定 一 個 目 錄 名 作 爲 應 用 (程 序 )名 的 一 部 分 , 在 嘗 試 定 位 應 用 (程 序 )時 , 依 次 在 下 列 目 錄 中 自 動 查 找 : 裝 載 Tcl 可 執 行 文 件 的 目 錄 。 當 前 目 錄 。

Windows 95 系 統 目 錄 。
Windows 95 主 目 錄 。 在 path 中 列 出 的 目 錄 。 要 執 行 shell 內 置 命 令 象 dircopy, 調 用 者 必 須 爲 想 用 的 命 令 加 上 command.exe /c ”前 導 (prepend)。 一 旦 一 個 16位 DOS 應 用 程 序 從 一 個 控 制 檯 讀 標 準 輸 入 接 着 退 出 , 所 以 後 來 運 行 的 16位 DOS 應 用 程 序 將 看 到 標 準 輸 入 已 經 被 關 閉 了 。 32位 應 用 程 序 沒 有 這 個 問 題 並 將 正 確 運 行 , 即 使 在 一 個 16位 DOS 應 用 程 序 認 爲 標 準 輸 入 已 經 被 關 閉 之 後 。 此 時 還 沒 有 針 對 這 個 缺 陷 的 已 知 的 工 作 項 目 (workaround)。

NUL: </B> 設 備 和 一 個 16位 應 用 程 序 之 間 的 重 定 向 不 總 是 工 作 。 在 從 NUL: 重 定 向 時 一 些 應 用 程 序 可 能 掛 起 , 另 一 些 將 得 到 永 無 窮 盡 (infinite)的 “0x01”字 節 流 (stream), 而 有 一 些 實 際 上 將 正 確 的 得 到 立 即 的 文 件 結 束 ; 這 些 行 爲 象 是 依 賴 於 編 譯 到 應 用 程 序 自 身 中 的 某 些 東 西 。 在 到 NUL:的 重 定 向 大 於 或 等 於 4K 時 , 一 些 應 用 將 掛 起 (hang)。 在 32位 應 用 程 序 中 不 發 生 上 述 問 題 。 所 有 DOS 16位 應 用 程 序 都 是 同 步 運 行 的 。 從 一 個 管 道 到 一 個 16位 DOS 應 用 程 序 的 所 有 標 準 輸 入 被 蒐 集 到 一 個 臨 時 文 件 中 ; 在 這 個 16位 DOS 應 用 程 序 開 始 執 行 之 前 , 管 道 的 其 他 端 點 (end)必 須 被 關 閉 。 從 一 個 16位 DOS應 用 程 序 到 一 個 管 道 的 所 有 標 準 輸 出 或 錯 誤 輸 出 被 蒐 集 到 一 個 臨 時 文 件 中 ; 在 臨 時 文 件 被 重 定 向 到 管 道 的 下 一 個 階 段 之 前 , 這 個 應 用 程 序 必 須 終 止 。 這 源 於 一 個 針 對 Windows 95在 實 現 管 道 中 的 一 個 缺 陷 的 工 作 項 目 , 也 是 標 準 的 Windows 95 DOS shell 自 身 處 理 管 道 的 方 式 。 特 定 的 應 用 程 序 , 象 command.com , 不 應 該 交 互 的 執 行 。 不 從 標 準 輸 入 讀 和 向 標 準 輸 出 寫 , 而 是 直 接 訪 問 控 制 檯 窗 口 的 應 用 程 序 可 能 會 失 敗 , 並 掛 起 Tcl, 如 果 它 們 自 己 的 私 有 控 制 檯 窗 口 不 可 使 用 甚 至 可 能 掛 起 系 統 。

Macintosh 在 Macintosh 下 exec 命 令 未 被 實 現 而 不 存 在 。
Unix

exec 命 令 是 全 功 能 的 並 象 上 面 描 述 的 那 樣 工 作 。

參 見 SEE ALSO

error(n), open(n)

關 鍵 字 KEYWORDS

execute, pipeline, redirection, subprocess

[中 文 版 維 護 人 ]

寒 蟬 退 士

[中 文 版 最 新 更 新 ]

2001/07/11

《 中 國 Linux 論 壇 man 手 冊 頁 翻 譯 計 劃 》 :

http://cmpp.linuxforum.net

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