简单命令
简单命令是可选变量赋值和重定向的序列,后跟命令名。
当 qsh识别简单命令时,它将执行以下操作:
- 将除去格式为 name=value 的前导词,并将其分配给简单命令的环境。 将保存重定向运算符及其自变量以在步骤 3 中进行处理。
- 其余单词如 Word 扩展中所述展开,第一个剩余单词被视为命令名。 任何附加词都被视为命令的自变量。 如果找不到命令名,那么步骤 1 中识别的 name=value 变量赋值将影响当前 shell。
- 如 重定向中所述执行重定向。
路径搜索
如果简单命令不包含任何斜杠,那么 qsh 会通过搜索来查找命令:
- 对于该名称的特殊内置实用程序,那么
- 对于该名称的 shell 函数,那么
- 对于该名称的常规内置实用程序,那么
- PATH 变量中的每个目录依次用于常规实用程序。
包含斜杠 (/) 的命令名将作为常规实用程序运行,而不执行上述任何搜索。
内置实用程序在 shell 内部运行,而不启动新进程。 特殊内置实用程序在以下方面与常规内置实用程序不同:
- 特殊内置实用程序中的语法错误导致非交互式 shell 退出。
- 使用特殊内置实用程序指定的变量赋值在该实用程序完成后仍然有效。
以下是特殊内置实用程序: break, 冒号, continue, declare, dot, eval, exec, exit, export, local, readonly, return, 设置, shift, source, trap, typeset和 unset。
运行 shell 函数时,会将所有 shell 位置参数 (特殊参数 0除外,该参数保持不变) 设置为 shell 函数的自变量。 显式放置在命令环境中的变量 (通过在函数名之前放置对它们的赋值) 将成为函数的本地变量,并设置为指定的值。 当 shell 函数完成时,位置参数将恢复为其原始值。
运行常规实用程序时, qsh 会启动一个新进程,将自变量和环境传递给程序。 如果程序是 shell 脚本,那么 qsh 将在子 shell 中解释程序。 在这种情况下, qsh 将重新初始化自身,这样效果就如同调用了新的 shell 来处理 shell 脚本一样。
命令退出状态
每个命令都具有可影响其他 shell 命令的行为的退出状态。 根据约定,对于正常或成功,命令将以零退出,对于失败,错误或错误指示,命令将以非零退出。 每个命令的文档都描述了它返回的退出代码及其含义。 退出状态可以是下列其中一个值:
- 0 表示成功。
- 1 到 125 表示失败。
- 126 当 qsh 找到命令但它不可执行时。
- 127 (当 qsh 找不到命令时)。
- 128 及以上,当命令由信号结束时。 值为 128 加上信号号。