exec [argument]...
eval [argument]...
exec command
eval argument...
source [-h] name
*exec [argument]...
*eval [argument]...
+exec [-c] [-a name] [command [argument ... ]]
+eval [argument]...
将执行这些参数指定的 exec 命令而不是此 shell,同时不创建新进程。输入/输出参数可能会显示,而且如果未指定任何其他参数,会导致修改 shell 输入/输出。
eval 内置命令的 argument 将被读取为 shell 的输入并将执行所生成的命令。
exec 将执行 command 而不是当前 shell,当前 shell 将终止。
eval 将其 argument 读取为 shell 的输入,并执行生成的命令。这通常用来执行作为命令或变量替换的结果生成的命令。
source 从 name 读取命令。source 命令可以嵌套,但如果嵌套太深,shell 的文件描述符可能会不足。在作为来源的文件中在任何层次存在错误都会终止所有嵌套的 source 命令。
将文件 name 中的命令放置在历史记录列表上但不执行它们。
如果指定了 arg,则 exec 内置命令将执行这些参数所指定的命令而不是此 shell,同时不创建新进程。输入参数/输出参数可以显示并会影响当前进程。如果未指定任何参数,则该命令的作用是修改输入/输出重定向列表所指定的文件描述符。在这种情况下,任何通过该机制打开的 2 以上的文件描述符编号将在调用其他程序时关闭。
eval 的参数将被读取为 shell 的输入并执行所生成的命令。
本手册页中,前面带有一个或两个 *(星号)的 ksh88(1) 命令会通过以下方式进行特殊处理:
命令完成时,该命令前面的变量赋值列表仍然有效。
在变量赋值后进行 I/O 重定向。
脚本中包含的错误会导致其中止。
如果字的后面是前面加有**的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 = 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。
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 命令是特殊的内置命令,将通过以下方式进行特殊处理:
命令完成时,该命令前面的变量赋值列表仍然有效。
在变量赋值之后处理 I/O 重定向。
脚本中包含的错误会导致其中止。
它们不是有效的函数名称。
对于跟在前面添加了 ++ 的命令之后且格式为变量赋值格式的单词,将通过与变量赋值相同的规则进行扩展。这意味着将在 = 符号之后执行波浪号替换,并且不执行字段分割和文件名生成。
ksh exec 支持以下选项:
argv[0] 设置为命令的 name。
在执行之前清除所有的环境变量,但当前 exec 命令中的变量赋值除外。
exec 返回以下退出值:
成功完成。
发生了重定向错误。
未找到 command。
找到了 command,但不是可执行的实用程序。
exec 返回以下退出值。如果指定了 command,则 exec 不会返回以下退出值。
成功完成。已成功完成所有的 I/O 重定向。
出现错误。
eval 返回以下退出值:
如果未指定 argument,则退出状态为 0.否则,该退出状态为 argument 操作数所定义命令的退出状态。
有关下列属性的说明,请参见 attributes(5):
|