]> 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 d150778e36bccc09036ba1c5a5a33257005f37f5..70aefbe48592edd5249b3a0182e135f67e3c2721 100644 (file)
--- a/lib.sh
+++ b/lib.sh
@@ -27,6 +27,28 @@ unset LS_COLORS
 installed() {
     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:
 # - Debian (debian)