Skip to content

Commit 2ebedc7

Browse files
committed
respect -- termination in argparsing
1 parent e1ee7c1 commit 2ebedc7

2 files changed

Lines changed: 25 additions & 10 deletions

File tree

lib.d/helpers/cli.sh

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,20 @@
1414
normalize_flags(){
1515
local fargs="$1"
1616
shift
17-
for arg in $@; do
18-
if [ "--" = ${arg:0:2} ]; then
17+
while [ $# -ne 0 ]; do
18+
arg="$1"
19+
shift
20+
if [ "--" = "$arg" ]; then
21+
echo "-- $@"
22+
break
23+
elif [ "--" = ${arg:0:2} ]; then
1924
echo ${arg%=*}
2025
[[ "$arg" == *"="* ]] && echo ${arg#*=}
2126
elif [ "-" = ${arg:0:1} ]; then
2227
local i=1
2328
while read -n1 flag; do
2429
((i++))
25-
[ -z "$flag" ] || echo "-$flag"
30+
[ -z "$flag" ] || printf "%s\n" "-$flag"
2631
if [[ "$fargs" == *"$flag"* ]]; then
2732
echo ${arg:$i}
2833
break
@@ -44,19 +49,26 @@ normalize_flags(){
4449

4550
normalize_flags_first(){
4651
local fargs="$1"
47-
local args=()
4852
shift
49-
args=()
50-
for arg in $(normalize_flags "$fargs" "$@"); do
51-
if [ "-" = ${arg:0:1} ]; then
52-
echo $arg
53+
set -- $(normalize_flags "$fargs" "$@")
54+
while [ $# -ne 0 ]; do
55+
arg="$1"
56+
shift
57+
if [ "--" = "$arg" ]; then
58+
for arg in ${args[@]}; do
59+
printf "%s\n" "$arg"
60+
done
61+
echo "-- $@"
62+
return
63+
elif [ "-" = ${arg:0:1} ]; then
64+
printf "%s\n" "$arg"
5365
else
5466
args+=( "$arg" )
5567
fi
5668
done
5769

5870
for arg in ${args[@]}; do
59-
echo $arg
71+
printf "%s\n" "$arg"
6072
done
6173
}
6274

lib.d/main_run.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ main_run(){
1515
if [ $# -eq 0 ]; then
1616
display_help 2
1717
else
18-
set -- $(normalize_flags "" "$@")
18+
echo $@
19+
set -- $(normalize_flags_first "" "$@")
20+
echo $@
21+
exit
1922
while [ $# -ne 0 ]; do
2023
case $1 in
2124
-b|--build) __build_flag=true ;;

0 commit comments

Comments
 (0)