手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

eval(1)

名称

exec , eval , source - 用于执行其他命令的 shell 内置函数

用法概要

sh

exec [argument]...
eval [argument]...

csh

exec command
eval argument...
source [-h] name

ksh88

*exec [argument]...
*eval [argument]...

ksh

+exec [-c] [-a name] [command [argument ... ]]
+eval [argument]...

描述

sh

将执行这些参数指定的 exec 命令而不是此 shell,同时不创建新进程。输入/输出参数可能会显示,而且如果未指定任何其他参数,会导致修改 shell 输入/输出。

eval 内置命令的 argument 将被读取为 shell 的输入并将执行所生成的命令。

csh

exec 将执行 command 而不是当前 shell,当前 shell 将终止。

eval 将其 argument 读取为 shell 的输入,并执行生成的命令。这通常用来执行作为命令或变量替换的结果生成的命令。

sourcename 读取命令。source 命令可以嵌套,但如果嵌套太深,shell 的文件描述符可能会不足。在作为来源的文件中在任何层次存在错误都会终止所有嵌套的 source 命令。

–h

将文件 name 中的命令放置在历史记录列表上但不执行它们。

ksh88

如果指定了 arg,则 exec 内置命令将执行这些参数所指定的命令而不是此 shell,同时不创建新进程。输入参数/输出参数可以显示并会影响当前进程。如果未指定任何参数,则该命令的作用是修改输入/输出重定向列表所指定的文件描述符。在这种情况下,任何通过该机制打开的 2 以上的文件描述符编号将在调用其他程序时关闭。

eval 的参数将被读取为 shell 的输入并执行所生成的命令。

本手册页中,前面带有一个或两个 *(星号)的 ksh88(1) 命令会通过以下方式进行特殊处理:

  1. 命令完成时,该命令前面的变量赋值列表仍然有效。

  2. 在变量赋值后进行 I/O 重定向。

  3. 脚本中包含的错误会导致其中止。

  4. 如果字的后面是前面加有**的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 = 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。

ksh

exec 是一个特殊内置命令,可用于处理文件描述符或用于将当前的 shell 替换为新的命令。

如果指定了 command,则当前的 shell 进程会被 command 替代,而不是运行 command 并等待其完成。无需使用 exec 来增强性能,因为 shell 会尽可能在内部隐式地使用 exec 机制。

如果未指定任何操作数,则 exec 可用于打开或关闭文件,或使用所有命令都可用的标准重定向机制处理当前 shell 环境中 09 之间的文件描述符。对于按此方法打开的 2 以上的文件描述符编号,会设置 close-on-exec 标志,这样在调用其他程序时就可关闭该文件描述符。

由于 exec 是一个特殊命令,任何失败都会导致调用该命令的脚本退出。通过从 command 实用程序调用 exec 可防止此类情况发生。

无法从受限 shell 调用 exec 来创建文件或打开文件进行写入或附加。

eval 是一个 shell 特殊内置命令,可通过将 argument 串联在一起(每个参数以空格分隔)来构造命令。生成的字符串将作为 shell 的输入,并在当前环境中进行计算。命令字将扩展两次,一次在构造 argument 时,还有一次在 shell 执行所构造的命令时。未指定 argument 不会出错。

本手册页中,前面带有一个或两个 + 符号的 ksh 命令是特殊的内置命令,将通过以下方式进行特殊处理:

  1. 命令完成时,该命令前面的变量赋值列表仍然有效。

  2. 在变量赋值之后处理 I/O 重定向。

  3. 脚本中包含的错误会导致其中止。

  4. 它们不是有效的函数名称。

  5. 对于跟在前面添加了 ++ 的命令之后且格式为变量赋值格式的单词,将通过与变量赋值相同的规则进行扩展。这意味着将在 = 符号之后执行波浪号替换,并且不执行字段分割和文件名生成。

选项

ksh

ksh exec 支持以下选项:

–a name

argv[0] 设置为命令的 name

–c

在执行之前清除所有的环境变量,但当前 exec 命令中的变量赋值除外。

退出状态

ksh88

exec 返回以下退出值:

0

成功完成。

1-125

发生了重定向错误。

127

未找到 command

126

找到了 command,但不是可执行的实用程序。

ksh

exec 返回以下退出值。如果指定了 command,则 exec 不会返回以下退出值。

0

成功完成。已成功完成所有的 I/O 重定向。

>0

出现错误。

eval 返回以下退出值:

如果未指定 argument,则退出状态为 0.否则,该退出状态为 argument 操作数所定义命令的退出状态。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os

另请参见

csh(1)ksh(1)ksh88(1)sh(1)attributes(5)