ns-path - ns-tools - Namespace utilities to reuse Open Source packaging efforts.
 (HTM) git clone git://r-36.net/ns-tools
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       ns-path (1244B)
       ---
            1 #!/bin/sh
            2 
            3 usage() {
            4         printf "usage: %s [-rn] ns cmd\n" "$(basename $1)" >&2
            5         exit 1
            6 }
            7 
            8 dorecursive=0
            9 stripns=0
           10 while getopts "rn" opt;
           11 do
           12         case $opt in
           13         r)
           14                 dorecursive=1
           15                 ;;
           16         n)
           17                 stripns=1
           18                 ;;
           19         *)
           20                 usage $0
           21                 ;;
           22         esac
           23 done
           24 shift $(($OPTIND - 1))
           25 
           26 [ $# -lt 2 ] && usage $0
           27 
           28 findpath() {
           29         errorn=1
           30         justone=0
           31         [ "$1" = "-1" ] && justone=1 && shift 1
           32         
           33         fnsroot="$1"
           34         fcmd="$2"
           35         NSPATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
           36         [ -e "$fnsroot/.ns/rc.conf" ] && . "$fnsroot/.ns/rc.conf"
           37 
           38         for p in $(echo $NSPATH | tr ':' ' ');
           39         do
           40                 if [ -x "$fnsroot${p}/$fcmd" -o -L "$fnsroot${p}/$fcmd" ];
           41                 then
           42                         errorn=0
           43                         if [ $stripns -eq 1 ];
           44                         then
           45                                 printf "%s/%s\n" "$p" "$fcmd"
           46                         else
           47                                 printf "%s%s/%s\n" "$fnsroot" "$p" "$fcmd"
           48                         fi
           49                         [ $justone -eq 1 ] && return 0
           50                 fi        
           51         done
           52         
           53         return $errorn
           54 }        
           55 
           56 nsroot="$(ns-root "$1")"
           57 [ $? -gt 0 ] && exit $?
           58 
           59 cmd="$2"
           60 rerrno=1
           61 if [ $dorecursive -eq 1 ];
           62 then
           63         cd "$nsroot";
           64         for ns in $(ls -1d */);
           65         do
           66                 findpath "$nsroot/$(printf "%s\n" "$ns" | tr -d "/")" "$cmd"
           67                 [ $? -eq 0 ] && rerrno=0
           68         done
           69 else
           70         findpath -1 "$nsroot" "$cmd"
           71         rerrno=$?
           72 fi
           73 
           74 if [ $rerrno -gt 0 ];
           75 then
           76         printf "Could not find %s in namespace %s.\n" "$cmd" "$nsroot" >&2
           77         exit 1
           78 else
           79         exit 0
           80 fi
           81