Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find out if a command exists on POSIX system

Tags:

I want to be able to tell if a command exists on any POSIX system from a shell script.

On Linux, I can do the following:

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

However, Solaris and MacOS which do not give an exit failure code when the command does not exist, they just print an error message to STDOUT.

Also, I recently discovered that the which command itself is not POSIX (see http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html)

Any ideas?

like image 611
singpolyma Avatar asked Apr 18 '09 00:04

singpolyma


People also ask

How do I check if a command exists?

You can use the posix compatible command to check, if the command exists from a bash script or not. if it returns >0 when the command is not found or an error occurs. similary you can use type and hash .

How will you check whether a command exists in Linux?

Use the command -v Command to Check if a Command Exists in Bash. The command -v is a built-in function in all POSIX systems and Bash. This function checks if a command exists as it returns the valid path for that command if it does exist and returns NULL if it does not.

What are POSIX commands?

POSIX is shorthand for Portable Operating System Interface. It is an IEEE 1003.1 standard that defines the language interface between application programs (along with command line shells and utility interfaces) and the UNIX operating system.


2 Answers

command -v is a POSIX specified command that does what which does.

It is defined to to return >0 when the command is not found or an error occurs.

like image 125
singpolyma Avatar answered Oct 23 '22 09:10

singpolyma


You could read the stdout/stderr of "which" into a variable or an array (using backticks) rather than checking for an exit code.

If the system does not have a "which" or "where" command, you could also grab the contents of the $PATH variable, then loop over all the directories and search for the given executable. That's essentially what which does (although it might use some caching/optimization of $PATH results).

like image 24
Andy White Avatar answered Oct 23 '22 07:10

Andy White