O'Reilly logo

bash Cookbook by Cameron Newham, JP Vossen, Carl Albing

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Finding a File Using a List of Possible Locations

Problem

You need to execute, source, or read a file, but it may be located in a number of different places in or outside of the $PATH.

Solution

If you are going to source the file and it's located somewhere on the $PATH, just source it. bash's built-in source command (also known by the shorter-to-type but harder-to-read POSIX name ".") will search the $PATH if the sourcepath shell option is set, which it is by default:

	$ source myfile

If you want to execute a file only if you know it exists in the $PATH and is executable, and you have bash version 2.05b or higher, use type -P to search the $PATH. Unlike the which command, type -P only produces output when it finds the file, which makes it much easier to use in this case:

	LS=$(type -P ls)
	[ -x $LS ] && $LS
	
	# --OR--
	
	LS=$(type -P ls)
	if [ -x $LS ]; then
	   : commands involving $LS here
	fi

If you need to look in a variety of locations, possibly including the $PATH, use a for loop. To search the $PATH, use the variable substitution operator ${variable/pattern/ replacement} to replace the : separator with a space, and then use for as usual. To search the $PATH and other possible locations, just list them:

	for path in ${PATH//:/ }; do
	    [ -x "$path/ls" ] && $path/ls
	done
	
	# --OR--
	
	for path in ${PATH//:/ } /opt/foo/bin /opt/bar/bin; do
	    [ -x "$path/ls" ] && $path/ls
	done

If the file is not in the $PATH, but could be in a list of locations, possibly even under different names, list the entire path and ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required