Advertisement
Guest User

inpath

a guest
Jan 9th, 2014
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.60 KB | None | 0 0
  1. #!/bin/bash
  2. #Written by Manuel Iglesias. glesialo@gmail.com
  3. #
  4.  
  5. CommandName=${0##*/}
  6.  
  7. echoE()
  8. {
  9. echo -e $* 1>&2
  10.     return 0
  11. }
  12.  
  13. Usage()
  14. {
  15. echoE "'$CommandName' searches for files in \$PATH directories and prints those found."
  16. echoE "FileNames with Metacharacters should be enclosed in single quotes."
  17. echoE "Usage: '$CommandName FileName [FileName ...]'."
  18. echoE
  19.     return 0
  20. }
  21.  
  22.  
  23.  
  24. if [ $# -lt 1 ] || [ "$1" == "-h" ] || [ "$1" == "-?" ] || [ "$1" == "--help" ] || [ "$1" == "-help" ]
  25.   then
  26.     Usage
  27.     exit 64
  28. fi
  29.  
  30. #Not found
  31. ExitCode=70
  32. #Substitute ':' by blanks and take care of different cases of '.' in PATH.
  33. for Dir in `echo $PATH | sed 's/^:/.:/
  34.                              s/::/:.:/g
  35.                              s/:$/:./
  36.                              s/:/ /g'`
  37.   do
  38.     ValidDirectory=true
  39.     InfoDirLine="Directory '$Dir"
  40.     if [ -L "$Dir" ] && ! [ -e "$Dir" ]
  41.       then
  42.         InfoDirLine=$InfoDirLine"' Broken link!"
  43.         ValidDirectory=false
  44.       else
  45.         if ! [ -e "$Dir" ]
  46.           then
  47.             InfoDirLine=$InfoDirLine"' Warning: not found!"
  48.             ValidDirectory=false
  49.           else
  50.             if ! [ -d "$Dir" ]
  51.               then
  52.                 InfoDirLine=$InfoDirLine"' Warning: not a directory!"
  53.                 ValidDirectory=false
  54.             fi
  55.         fi
  56.     fi
  57.     if $ValidDirectory
  58.       then
  59. #       If last character of $Dir is not "/"
  60.         if [ "${Dir:${#Dir}-1:1}" != "/" ]
  61.           then
  62.             InfoDirLine=$InfoDirLine"/"
  63.         fi
  64.         if [ -L "$Dir" ]
  65.           then
  66.             OriginalDir=`readlink -e $Dir`
  67.             Dir=$OriginalDir
  68. #           If last character of $OriginalDir is not "/"
  69.             if [ "${OriginalDir:${#OriginalDir}-1:1}" != "/" ]
  70.               then
  71.                 InfoDirLine=$InfoDirLine" -> $OriginalDir/"
  72.               else
  73.                 InfoDirLine=$InfoDirLine" -> $OriginalDir"
  74.             fi
  75.         fi
  76.         InfoDirLine=$InfoDirLine"':"
  77.     fi
  78.     if $ValidDirectory
  79.       then
  80.         FoundFiles=""
  81.         cd $Dir
  82.         FoundFiles=`ls -1ABd $@ 2>/dev/null`
  83.         if [ -n "$FoundFiles" ]
  84.           then
  85.             ExitCode=0
  86.             echo $InfoDirLine
  87.             for FileName in $FoundFiles
  88.               do
  89.                 InfoLine="\t$FileName"
  90.                 if [ -L $FileName ]
  91.                   then
  92.                     OriginalFile=`readlink -e $FileName`
  93.                     if [ -n "$OriginalFile" ]
  94.                       then
  95.                         if [ -d "$OriginalFile" ]
  96.                           then
  97.                             InfoLine=$InfoLine"/ -> ${OriginalFile#${Dir}/}/"
  98.                           else
  99.                             InfoLine=$InfoLine" -> ${OriginalFile#${Dir}/}"
  100.                             if ! [ -x "$OriginalFile" ]
  101.                               then
  102.                                 InfoLine=$InfoLine"  Not executable!"
  103.                             fi
  104.                         fi
  105.                       else
  106.                         InfoLine=$InfoLine" (broken link)"
  107.                     fi
  108.                   else
  109.                     if [ -d "$FileName" ]
  110.                       then
  111.                         InfoLine=$InfoLine"/"
  112.                       else
  113.                         if ! [ -x "$FileName" ]
  114.                           then
  115.                             InfoLine=$InfoLine"  Not executable!"
  116.                         fi
  117.                     fi
  118.                 fi
  119.                 echo -e "$InfoLine"
  120.               done
  121.         fi
  122.       else
  123.         echo $InfoDirLine
  124.     fi
  125.   done
  126.  
  127. exit $ExitCode
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement