- Se a opção
-m
não obtiver um valor, você exit
do shell.
- Se você usar a opção
-p
, você exit
do shell.
- Se você usar uma opção inválida, você
exit
do shell.
Em todos esses casos, você deve return
em vez de exit
e, em todos os casos, exceto o segundo, você deve return 1
(para sinalizar um erro). Além disso, as mensagens de erro devem ser redirecionadas para o fluxo de erro padrão com >&2
.
Aqui está uma versão da sua função com algumas modificações que fazem com que ela não produza nada, a menos que a análise da linha de comando tenha corrido bem.
wsgc () {
local OPTIND=1
local out=( "git add -A" )
while getopts 'm:p' opt; do
case "$opt" in
m) out+=( "git commit -m '$OPTARG'" ) ;;
p) out+=( 'git push' ) ;;
*) return 1 ;;
esac
done
printf '%s\n' "${out[@]}"
}
Se você precisar impor uma ordem da saída (o git push
será a última coisa que será emitida se -p
for o último na linha de comando com a função acima), então use flags. Isso também não produzirá vários comandos se uma opção for usada várias vezes.
wsgc () {
local OPTIND=1
local message
local do_push=0
while getopts 'm:p' opt; do
case "$opt" in
m) message="$OPTARG" ;;
p) do_push=1 ;;
*) return 1 ;;
esac
done
local out=( "git add -A" )
if [[ -n "$message" ]]; then
out+=( "git commit -m '$message'" )
fi
if (( do_push )); then
out+=( 'git push' )
fi
printf '%s\n' "${out[@]}"
}
Esse último bit da função pode ser encurtado para
local out=( "git add -A" )
[[ -n "$message" ]] && out+=( "git commit -m '$message'" )
(( do_push )) && out+=( 'git push' )
printf '%s\n' "${out[@]}"