]> ruderich.org/simon Gitweb - config/dotfiles.git/commitdiff
lib.sh: Improve installed() to work with more which.
authorSimon Ruderich <simon@ruderich.org>
Sun, 7 Mar 2010 20:49:57 +0000 (21:49 +0100)
committerSimon Ruderich <simon@ruderich.org>
Sun, 7 Mar 2010 20:49:57 +0000 (21:49 +0100)
Also add tests to check for different which implementations.

lib.sh
tests/lib.sh.test
tests/lib.sh.test.out

diff --git a/lib.sh b/lib.sh
index da00cce8d2c9be6e4b13f77bbe638bb8718eb1de..49ce998660f3132b0b33d2bbca86e5ac936719f6 100644 (file)
--- a/lib.sh
+++ b/lib.sh
@@ -11,7 +11,7 @@ unset LS_COLORS
 # Check if the given program is installed. Returns 0 if it exists, 1
 # otherwise; so it can be used in if.
 installed() {
 # Check if the given program is installed. Returns 0 if it exists, 1
 # otherwise; so it can be used in if.
 installed() {
-    which $1 | grep -E '^/' > /dev/null
+    which $1 2>&1 | perl -ne 'if (not m{^/}) { exit 1 }'
 }
 
 # Prints the current OS. Supported are Debian (debian), Gentoo (gentoo) and
 }
 
 # Prints the current OS. Supported are Debian (debian), Gentoo (gentoo) and
index 32bbd70c3d38f32c15bcfb4b693c1dfcbcaf4f4c..171c7c23ad583f21bf29f3c898fe7e628c230f17 100644 (file)
@@ -3,21 +3,41 @@
 
 . ../lib.sh
 
 
 . ../lib.sh
 
-# Tests for installed() with hopefully proper exit codes (1 if the program was
-# not found).
+# which with proper exit codes and output to stdout.
+which() {
+    if [ $1 = ls ]; then
+        echo /bin/ls
+    else
+        echo no doesnt-exist in /usr/bin /bin /usr/sbin /sbin
+        (exit 1)
+    fi
+}
+echo stdout which
+installed ls && echo ls installed
+installed doesnt-exist && echo doesnt-exist installed
+
+# which with proper exit codes and output to stderr in case of an error.
+which() {
+    if [ $1 = ls ]; then
+        echo /bin/ls
+    else
+        echo no doesnt-exist in /usr/bin /bin /usr/sbin /sbin >&2
+        (exit 1)
+    fi
+}
+echo stderr which
 installed ls && echo ls installed
 installed doesnt-exist && echo doesnt-exist installed
 
 installed ls && echo ls installed
 installed doesnt-exist && echo doesnt-exist installed
 
-# Simulate BSD `which` like on Mac OS X which doesn't use exit codes.
-function which() {
-    echo Mac OS X which for $1 >&2
+# which with no proper exit codes and output to stdout in case of an error.
+which() {
     if [ $1 = ls ]; then
         echo /bin/ls
     else
         echo no doesnt-exist in /usr/bin /bin /usr/sbin /sbin
     fi
 }
     if [ $1 = ls ]; then
         echo /bin/ls
     else
         echo no doesnt-exist in /usr/bin /bin /usr/sbin /sbin
     fi
 }
-# Tests for installed() without exit codes.
+echo stupid which
 installed ls && echo ls installed
 installed doesnt-exist && echo doesnt-exist installed
 
 installed ls && echo ls installed
 installed doesnt-exist && echo doesnt-exist installed
 
index 9258e0fd23859aede325d35d2700152ecf7320af..7139144dc00d1dc25fd1f8340ef5f3bc35855c0a 100644 (file)
@@ -1,7 +1,9 @@
+stdout which
 ls installed
 ls installed
-Mac OS X which for ls
+stderr which
+ls installed
+stupid which
 ls installed
 ls installed
-Mac OS X which for doesnt-exist
 m4: generating 'tmp/test' from 'tmp/test.m4' with options '-DTEST=m4'
 ###################################
 # WARNING! DO NOT EDIT THIS FILE! #
 m4: generating 'tmp/test' from 'tmp/test.m4' with options '-DTEST=m4'
 ###################################
 # WARNING! DO NOT EDIT THIS FILE! #