mirror of
https://github.com/notwa/rc
synced 2025-02-05 07:43:22 -08:00
simplify flag parsing code in permit
This commit is contained in:
parent
8904f22242
commit
9d5a240d55
1 changed files with 9 additions and 18 deletions
27
sh/permit
27
sh/permit
|
@ -25,7 +25,7 @@ permit() { ### @- conditionally set executable permissions on each of its argume
|
|||
### already executable by the current user are skipped. arguments that do
|
||||
### not appear to refer to an existing file are passed through to chmod.
|
||||
### directories are never recursed.
|
||||
unset __permit_4 __permit_a __permit_f __permit_h __permit_m __permit_n __permit_x || return
|
||||
unset __permit_4 __permit_a __permit_f __permit_h __permit_m __permit_x || return
|
||||
|
||||
__permit_h="[-a | -A] [-e | -f | -d] [--] {files...}"
|
||||
if [ $# = 0 ]; then
|
||||
|
@ -33,43 +33,34 @@ permit() { ### @- conditionally set executable permissions on each of its argume
|
|||
return 64;
|
||||
fi
|
||||
|
||||
__permit_m=e # everything
|
||||
__permit_m=e # mode
|
||||
__permit_a=0 # automatic
|
||||
|
||||
__permit_n=$#
|
||||
while [ $((__permit_n-=1)) -ge 0 ]; do
|
||||
__permit_f="$1"
|
||||
case "$__permit_f" in
|
||||
|
||||
unset __permit_stop || return
|
||||
for __permit_f; do
|
||||
shift
|
||||
case "${__permit_stop+:}$__permit_f" in
|
||||
(/\?|-h|-help|--help)
|
||||
printf 'usage: permit %s\n' "$__permit_h"
|
||||
return 0;;
|
||||
|
||||
(--)
|
||||
shift
|
||||
while [ $((__permit_n-=1)) -ge 0 ]; do
|
||||
set -- "$@" "$1"
|
||||
shift
|
||||
done
|
||||
break;;
|
||||
|
||||
__permit_stop=1;;
|
||||
(-?*)
|
||||
shift
|
||||
while __permit_f="${__permit_f#?}"; [ -n "$__permit_f" ]; do
|
||||
case "${__permit_f}" in
|
||||
|
||||
(a*) __permit_a=1;; # automatic (on)
|
||||
(A*) __permit_a=0;; # automatic (off)
|
||||
(e*) __permit_m=e;; # everything
|
||||
(f*) __permit_m=f;; # files only
|
||||
(d*) __permit_m=d;; # directories only
|
||||
|
||||
(*)
|
||||
printf >&2 'permit: unknown flag: -%.1s\n' "$__permit_f"
|
||||
return 64;;
|
||||
esac
|
||||
done;;
|
||||
|
||||
(*)
|
||||
shift
|
||||
set -- "$@" "$__permit_f";;
|
||||
esac
|
||||
done
|
||||
|
|
Loading…
Add table
Reference in a new issue