mandato Command

Finalidad

Ejecuta un mandato simple.

Sintaxis

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

Descripción

El mandato command hace que el shell trate el mandato y los argumentos especificados como un mandato simple, suprimiendo la búsqueda de función de shell.

Normalmente, cuando a/(barra inclinada) no precede a un mandato (que indica una vía de acceso específica), el shell localiza un mandato buscando en las categorías siguientes:

  1. shell especial incorporado
  2. funciones de shell
  3. shell normal incorporado
  4. Variable de entorno PATH

Por ejemplo, si hay una función con el mismo nombre que una normal incorporada, el sistema utiliza la función. El mandato command le permite llamar a un mandato que tiene el mismo nombre que una función y obtener el mandato simple.

Los comandos -v y -V escriben en la salida estándar qué nombre de ruta utilizará el shell y cómo interpreta el shell el tipo de comando (integrado, función, alias, etc.). Dado que los indicadores -v y -V producen resultados en relación con el entorno actual del shell, el comando command se proporciona como un comando incorporado regular del shell Korn o del shell POSIX. El /usr/bin/command puede que no produzca resultados correctos, porque se llama en un subshell o en un entorno de ejecución de comandos separado. En el ejemplo siguiente, el shell no puede identificar alias, subrutinas o mandatos de shell especiales:

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

Distintivos

Elemento Descripción
-p Realiza la búsqueda de mandatos utilizando un valor predeterminado para la variable de entorno PATH que busca todos los mandatos estándar.
-v Escribe en la salida estándar el nombre de vía de acceso utilizado por el shell actual para invocar el mandato especificado, de acuerdo con los convenios siguientes:
  • Los mandatos, los mandatos incorporados regulares, los mandatos que incluyen una/(barra inclinada) y las funciones proporcionadas por la implementación que encuentre la variable de entorno PATH se escriben como nombres de vía de acceso absolutos.
  • Las funciones de shell, los mandatos incorporados especiales, los mandatos incorporados regulares no asociados con una búsqueda de variable de entorno PATH y las palabras reservadas de shell se escriben como sus nombres.
  • Los alias se identifican como tales y sus definiciones se incluyen en la serie.

Si no se puede encontrar el nombre de mandato especificado, no se graba ninguna salida y el estado de salida devuelve un valor > 0 .

-v Escribe en la salida estándar el nombre de mandato que interpretará el entorno de shell actual. Aunque el formato de esta salida no está especificado, la salida indica en cuál de las categorías siguientes se encuentra el mandato:
  • Los mandatos, los mandatos de shell normales y las subrutinas proporcionadas por la implementación que se encuentren utilizando la variable de entorno PATH se identifican como tales y se escriben como nombres de vía de acceso absolutos.
  • Otras funciones de shell se identifican como funciones.
  • Los alias se identifican como tales y sus definiciones se incluyen en la serie.
  • Los mandatos incorporados especiales se identifican como tales.
  • Los mandatos incorporados regulares no asociados con la búsqueda de variables de entorno PATH se identifican como tales.
  • Las palabras reservadas de shell se identifican como tales.

Estado de salida

Cuando se especifica el distintivo -v o -V , se devuelven los siguientes valores de salida:

Elemento Descripción
0 Finalización satisfactoria.
>0 No se ha podido encontrar el mandato especificado con el parámetro nombre_mandato o se ha producido un error.

Cuando no se especifica el distintivo -v o -V , se devuelven los siguientes valores de salida:

Elemento Descripción
126 Se ha encontrado el mandato especificado por el parámetro nombre_mandato pero no se ha podido invocar.
127 Se ha producido un error en el mandato command , o no se ha podido encontrar el mandato especificado por el parámetro nombre_mandato .

De lo contrario, el mandato command devuelve el estado de salida asociado con el mandato especificado por el parámetro nombre_mandato .

Ejemplos

  1. Para crear una versión del mandato cd que imprima el nuevo directorio de trabajo siempre que cambie de directorio, entre:
    cd () {
            command cd "$@" >/dev/null
            pwd
    }
  2. Para iniciar un script de Secure Shell, en el que el script evita ser suplantado por su padre, entre:
    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.
     
    # ...
    En este punto, teniendo en cuenta los permisos correctos en los directorios invocados por la variable de entorno PATH , el script tiene la capacidad de asegurarse de que cualquier mandato al que llame sea el deseado.

Archivos

Elemento Descripción
/usr/bin/ksh Contiene el mandato incorporado command del shell Korn.
/usr/bin/command Contiene el mandato command .