isposix

Un outil pour savoir si une commande est posix - retour accueil

git clone git://bebou.netlib.re/isposix
Log | Files | Refs | README |

isposix.sh (1425B)


      1 #! /bin/sh
      2 set -e
      3 
      4 _die() { printf "$red$@$norm" >&2 ; }
      5 _success() { printf "$green$@$norm" >&2; }
      6 _inform() { printf "$blue$@$norm" >&2; }
      7 _cmdnotposix() {
      8 	_die "$cmd not posix"
      9 	if command -V fzy 2>&1 > /dev/null;then
     10 		fzcmd=$(find /var/isposix -name '*.html' |
     11 				sed -E 's,/var/isposix/([^.]+)\.html,\1,' |
     12 				fzy -e "$cmd" | head -n3)
     13 	fi
     14 	[ -z "$fzcmd" ] \
     15 		|| _inform ", did you mean : $(echo "$fzcmd" | paste -s -d',') ?"
     16 }
     17 
     18 usage() {
     19 	<<-. cat
     20 	Check if command or its options are posix
     21 
     22 	isposix command [options]
     23 
     24 	exemple :
     25 
     26 	isposix ls
     27 	isposix ls -a
     28 	.
     29 }
     30 
     31 checkoption() {
     32 	cmd="$1";option="$2"
     33 	< /var/isposix/$cmd.html grep -Eq "<dt><b>-$option[&<].*</dt>" \
     34 		&& { _success " -$option";return 0;} \
     35 		|| { _die " -$option"; return 1;}
     36 }
     37 
     38 while getopts "c" opt; do
     39 	case "$opt" in
     40 		( c ) red="\033[91m";green="\033[92m";blue="\033[94m";norm="\033[0m";;
     41   esac
     42 done
     43 
     44 scriptisposix=0
     45 while read line;do
     46 	[ -z "$line" ] && continue
     47 	set -- $line
     48 	cmdisposix=0
     49 	cmd="$1";shift
     50 	[ "$cmd" = "[" ] && cmd="test"
     51 	if [ ! -f "/var/isposix/$cmd.html" ];then
     52 		_cmdnotposix;cmdisposix=1
     53 	else
     54 		_success "$cmd"
     55 		while getopts "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" opt; do
     56 			case "$opt" in
     57 				( * ) checkoption "$cmd" "$opt" || cmdisposix=1;;
     58 		  esac
     59 		done
     60 	fi
     61 	[ $cmdisposix = "0" ] \
     62 		&& _success " | is posix\n" \
     63 		|| { _die " | not posix\n";scriptisposix=1; }
     64 done
     65 
     66 exit $scriptisposix
     67