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
|
### already executable by the current user are skipped. arguments that do
|
||||||
### not appear to refer to an existing file are passed through to chmod.
|
### not appear to refer to an existing file are passed through to chmod.
|
||||||
### directories are never recursed.
|
### 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...}"
|
__permit_h="[-a | -A] [-e | -f | -d] [--] {files...}"
|
||||||
if [ $# = 0 ]; then
|
if [ $# = 0 ]; then
|
||||||
|
@ -33,43 +33,34 @@ permit() { ### @- conditionally set executable permissions on each of its argume
|
||||||
return 64;
|
return 64;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
__permit_m=e # everything
|
__permit_m=e # mode
|
||||||
__permit_a=0 # automatic
|
__permit_a=0 # automatic
|
||||||
|
|
||||||
__permit_n=$#
|
unset __permit_stop || return
|
||||||
while [ $((__permit_n-=1)) -ge 0 ]; do
|
for __permit_f; do
|
||||||
__permit_f="$1"
|
shift
|
||||||
case "$__permit_f" in
|
case "${__permit_stop+:}$__permit_f" in
|
||||||
|
|
||||||
(/\?|-h|-help|--help)
|
(/\?|-h|-help|--help)
|
||||||
printf 'usage: permit %s\n' "$__permit_h"
|
printf 'usage: permit %s\n' "$__permit_h"
|
||||||
return 0;;
|
return 0;;
|
||||||
|
|
||||||
(--)
|
(--)
|
||||||
shift
|
__permit_stop=1;;
|
||||||
while [ $((__permit_n-=1)) -ge 0 ]; do
|
|
||||||
set -- "$@" "$1"
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
break;;
|
|
||||||
|
|
||||||
(-?*)
|
(-?*)
|
||||||
shift
|
|
||||||
while __permit_f="${__permit_f#?}"; [ -n "$__permit_f" ]; do
|
while __permit_f="${__permit_f#?}"; [ -n "$__permit_f" ]; do
|
||||||
case "${__permit_f}" in
|
case "${__permit_f}" in
|
||||||
|
|
||||||
(a*) __permit_a=1;; # automatic (on)
|
(a*) __permit_a=1;; # automatic (on)
|
||||||
(A*) __permit_a=0;; # automatic (off)
|
(A*) __permit_a=0;; # automatic (off)
|
||||||
(e*) __permit_m=e;; # everything
|
(e*) __permit_m=e;; # everything
|
||||||
(f*) __permit_m=f;; # files only
|
(f*) __permit_m=f;; # files only
|
||||||
(d*) __permit_m=d;; # directories only
|
(d*) __permit_m=d;; # directories only
|
||||||
|
|
||||||
(*)
|
(*)
|
||||||
printf >&2 'permit: unknown flag: -%.1s\n' "$__permit_f"
|
printf >&2 'permit: unknown flag: -%.1s\n' "$__permit_f"
|
||||||
return 64;;
|
return 64;;
|
||||||
esac
|
esac
|
||||||
done;;
|
done;;
|
||||||
|
|
||||||
(*)
|
(*)
|
||||||
shift
|
|
||||||
set -- "$@" "$__permit_f";;
|
set -- "$@" "$__permit_f";;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
Loading…
Add table
Reference in a new issue