alex
2018-05-03 10:07:02 UTC
$ cat test.sh
#!/bin/bash
function sub_command {
# parsing locale
local options
options=$(getopt -o s --long "sub-test" -- "$@") \
|| exit 1
eval set -- "$options"
while true; do
case "$1" in
-s|--sub-test)
SUB_TEST=0
shift
;;
--)
shift
break
;;
esac
done
# FAI QUALCOSA...
}
# parsing globale
options=$(getopt -o t --long "test" -- "$@") \
|| exit 1
eval set -- "$options"
while true; do
case "$1" in
-t|--test)
TEST=0
shift
;;
--)
shift
break
;;
esac
done
# esecuzione sotto-comando
$1 "$@"
Come vedete abbiamo un parsing globale per parsare le opzioni relative
all'intero script, e un parsing locale per parsare le opzioni relative
solo alla function sub_command.
Proviamo quindi se tutto funziona
$ ./test.sh --test sub_command --sub-test
getopt: opzione non riconosciuta "--sub-test"
Qualcosa non va, e intuisco che il problema è che il parsing globale,
tenta di parsare anche l'opzione --sub-test, che giustamente non riconosce.
Tale opzione infatti se la dovrebbe parsare la function sub_command per
conto suo.
Come fare?
#!/bin/bash
function sub_command {
# parsing locale
local options
options=$(getopt -o s --long "sub-test" -- "$@") \
|| exit 1
eval set -- "$options"
while true; do
case "$1" in
-s|--sub-test)
SUB_TEST=0
shift
;;
--)
shift
break
;;
esac
done
# FAI QUALCOSA...
}
# parsing globale
options=$(getopt -o t --long "test" -- "$@") \
|| exit 1
eval set -- "$options"
while true; do
case "$1" in
-t|--test)
TEST=0
shift
;;
--)
shift
break
;;
esac
done
# esecuzione sotto-comando
$1 "$@"
Come vedete abbiamo un parsing globale per parsare le opzioni relative
all'intero script, e un parsing locale per parsare le opzioni relative
solo alla function sub_command.
Proviamo quindi se tutto funziona
$ ./test.sh --test sub_command --sub-test
getopt: opzione non riconosciuta "--sub-test"
Qualcosa non va, e intuisco che il problema è che il parsing globale,
tenta di parsare anche l'opzione --sub-test, che giustamente non riconosce.
Tale opzione infatti se la dovrebbe parsare la function sub_command per
conto suo.
Come fare?