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