tipo que caracteristicas unix shell posix

unix - que - Descubra si existe un comando en el sistema POSIX



posix windows (3)

Quiero poder decir si existe un comando en cualquier sistema POSIX desde un script de shell.

En Linux, puedo hacer lo siguiente:

if which <command>; then ...snip... fi

Sin embargo, Solaris y MacOS which no dan un código de falla de salida cuando el comando no existe, simplemente imprimen un mensaje de error a STDOUT.

Además, descubrí recientemente que el comando en sí no es POSIX (ver http://www.opengroup.org/onlinepubs/009695399/utilities/ )

¿Algunas ideas?


Puede leer el stdout / stderr de "which" en una variable o una matriz (usando palos) en lugar de buscar un código de salida.

Si el sistema no tiene un comando "which" o "where", también puede tomar el contenido de la variable $ PATH, luego recorrer todos los directorios y buscar el ejecutable dado. Eso es esencialmente lo que hace (aunque podría usar algo de almacenamiento en caché u optimización de los resultados de $ PATH).


command -v es un comando especificado POSIX que hace lo que hace.

Está definido para devolver> 0 cuando no se encuentra el comando o se produce un error.


POSIX dice: " Si no se encuentra un comando, el estado de salida será 127 ". Así que podrías hacer

<command> if [ "${?}" = 127 ]; then <handle not found> fi

Al escribir scripts de shell, a menudo es permisible requerir un shell bash ( #!/bin/bash ), porque sin matrices es casi imposible manejar argumentos y / o nombres de archivos con espacios correctamente. En ese caso, el type -p incorporado bash type -p es equivalente a lo que, y debido a que está incorporado, es portátil.