command 命令

用途

执行简单命令。

语法

command [-p] command_name [argument...]
command [-p] [-v|-V ] command_name

描述

command 命令导致 shell 将指定的命令和变量视为简单命令,禁止了 shell 功能查询。

通常,当 /(斜杠)不在命令(表示特定的路径)之前时,shell 通过搜索以下类别找到命令:

  1. 特殊 shell 内置
  2. shell 函数
  3. 常规 shell 内置
  4. PATH 环境变量

例如,如果存在具有与常规的内置相同名称的函数,那么系统使用该函数。 command 命令允许您调用具有与某个函数相同名称的命令,并获取简单命令。

command -v command -V 命令将由 shell 使用的路径名以及 shell 如何解释命令类型(内部构件、函数、别名,等等)写到标准输出。 由于 -v -V 标志产生与当前 shell 环境相关的输出,所以提供 command 命令作为 korn shell 程序或 POSIX shell 的常规的内置命令。 由于 /usr/bin/command 命令在子 shell 程序或独立命令执行环境中调用,所以它可能不产生正确的结果。 在以下示例中,shell 不能标识别名、子例程或特殊shell 命令:

(PATH=foo command -v)
nohup command -v

标志

描述
-p 使用 PATH 环境变量的缺省值执行命令搜索,即,查找所有标准命令。
-v 根据以下约定,将由当前 shell 使用的路径名称写到标准输出以调用指定的命令:
  • 将命令、常规内置命令、包括 /(斜杠)的命令以及任何由 PATH 环境变量查找到的已提供实现的函数写为绝对路径名。
  • 将 shell 函数、特殊内置命令、不与 PATH 环境变量搜索关联的常规内置命令以及 shell 保留字只写为其名称。
  • 象这样标识别名,并且其定义包括在字符串中。

如果找不到指定的命令名,那么不会写入任何输出,并且退出状态会返回 > 0 值。

-V 将由当前 shell 环境解释的命令名写到标准输出。 虽然未指定此输出的格式,但输出表示命令在以下哪一个目录中:
  • 将命令、常规 shell 命令以及任何使用 PATH 环境变量找到的已提供实现的子例程如此标识,并写为绝对路径名。
  • 其他 shell 函数标识为函数。
  • 象这样标识别名,并且其定义包括在字符串中。
  • 特殊的内置命令如此标识。
  • 不与 PATH 环境变量搜索关联的常规内置命令如此标识。
  • shell 保留字符如此标识。

退出状态

当指定 -v -V 标志,那么返回以下退出值:

描述
重大安全事件数量 成功完成。
> 0 找不到使用 command_name 参数指定的命令或发生错误。

当未指定 -v -V 标志时,返回以下退出值:

描述
126 找到了由 command_name 参数指定的命令,但无法调用该命令。
127 command 命令中发生错误,或者找不到由 command_name 参数指定的命令。

否则, command 命令返回与 command_name 参数指定的命令相关联的退出状态。

示例

  1. 要生成每当更改目录时打印出新工作目录的 cd 命令版本,请输入:
    cd () {
            command cd "$@" >/dev/null
            pwd
    }
  2. 要启动安全 shell 脚本 (其中脚本避免被其父代破坏) ,请输入:
    IFS='
    '
    #       The preceding value should be <space><tab><newline>.
    #       Set IFS to its default value
     
    \unalias -a
    #       Unset all possible aliases.
    #       Note that unalias is escaped to prevent an alias
    #       being used for unalias.
     
    unset -f command
    #       Ensure command is not a user function.
     
    PATH="$(command -p getconf _CS_PATH):$PATH"
    #       Put on a reliable PATH prefix.
     
    # ...
    在此处,给出由 PATH 环境变量调用的目录的正确权限,该脚本具有确保其调用的任何命令都是计划的命令的能力。

文件

描述
/usr/bin/ksh 包含 Korn shell 程序 command 内置命令。
/usr/bin/command 包含 command 命令。