Facebook
From Trivial Hog, 3 Years ago, written in Plain Text.
This paste is a reply to Untitled from Blush Zebra - view diff
Embed
Download Paste or View Raw
Hits: 55
  1. #! /bin/sh
  2. set -ef
  3.  
  4. if test -n "$KSH_VERSION"; then
  5.         puts() {
  6.                 print -r -- "$*"
  7.         }
  8. else
  9.         puts() {
  10.                 printf '%s\n' "$*"
  11.         }
  12. fi
  13.  
  14. ALLMATCHES=0
  15.  
  16. while getopts a whichopts
  17. do
  18.         case "$whichopts" in
  19.                 a) ALLMATCHES=1 ;;
  20.                 ?) puts "Usage: $0 [-a] args"; exit 2 ;;
  21.         esac
  22. done
  23. shift $(($OPTIND - 1))
  24.  
  25. if [ "$#" -eq 0 ]; then
  26.  ALLRET=1
  27. else
  28.  ALLRET=0
  29. fi
  30. case $PATH in
  31.         (*[!:]:) PATH="$PATH:" ;;
  32. esac
  33. for PROGRAM in "$@"; do
  34.  RET=1
  35.  IFS_SAVE="$IFS"
  36.  IFS=:
  37.  case $PROGRAM in
  38.   */*)
  39.    if [ -f "$PROGRAM" ] && [ -x "$PROGRAM" ]; then
  40.     puts "$PROGRAM"
  41.     RET=0
  42.    fi
  43.    ;;
  44.   *)
  45.    for ELEMENT in $PATH; do
  46.     if [ -z "$ELEMENT" ]; then
  47.      ELEMENT=.
  48.     fi
  49.     if [ -f "$ELEMENT/$PROGRAM" ] && [ -x "$ELEMENT/$PROGRAM" ]; then
  50.      puts "$ELEMENT/$PROGRAM"
  51.      RET=0
  52.      [ "$ALLMATCHES" -eq 1 ] || break
  53.     fi
  54.    done
  55.    ;;
  56.  esac
  57.  IFS="$IFS_SAVE"
  58.  if [ "$RET" -ne 0 ]; then
  59.   ALLRET=1
  60.  fi
  61. done
  62.  
  63. exit "$ALLRET"