]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - lib.sh
lib.sh: Add installed_path(), a portable `which`.
[config/dotfiles.git] / lib.sh
diff --git a/lib.sh b/lib.sh
index 95c2fdf5c83efdc37212468d00e8f4c837ca7ac8..70aefbe48592edd5249b3a0182e135f67e3c2721 100644 (file)
--- a/lib.sh
+++ b/lib.sh
 unset LS_COLORS
 
 
-# Check if the given program is installed. Returns 0 if it exists, 1
-# otherwise; so it can be used in if.
+# Check if the given program is installed. `type` is portable, `which` is not.
 installed() {
-    [ x`which $1 2>&1 | cut -c 1` = x/ ] || return 1
+    type "$1" >/dev/null 2>&1
+}
+# Get the path of the given program. Thanks to Gilles on [1] (read on
+# 2013-03-10) for the PATH-walking idea. `which` is not portable and `type`
+# has no well-formed output format.
+#
+# [1]: http://unix.stackexchange.com/questions/4988/how-do-i-test-to-see-if-an-application-exists-in-path/4991
+installed_path() {
+    test -z "$1" && return 1
+
+    # Keep IFS change local.
+    (
+        IFS=:
+        # Walk PATH.
+        for directory in $PATH; do
+            if test -x "$directory/$1"; then
+                echo "$directory/$1"
+                return 0
+            fi
+        done
+
+        return 1
+    )
 }
 
 # Print the current OS. The following OS are supported at the moment: