Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2022年7月27日 星期三
 
 

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 的输入,并执行生成的命令。这通常用来执行作为命令或变量替换的结果生成的命令。

source 从 name 读取命令。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 环境中 0 到 9 之间的文件描述符。对于按此方法打开的 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(7):

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

另请参见

csh(1)、ksh(1)、ksh88(1)、sh(1)、attributes(7)