Почему ${OPTARG} пустой
У меня есть код:
git_setup=false
postgresql_setup=false
java_setup=false
maven_setup=false
project_download=false
project_compile=false
project_run=false
while getopts fullInstall:gitSetup:psqlSetup:javaSetup:mavenSetup:projectDownload:projectCompile:projectRun: option
do
case "${option}"
in
f | -fullInstall) git_setup=true
postgresql_setup=true
java_setup=true
maven_setup=true
project_download=true
project_compile=true;;
g | -gitSetup) git_setup=$OPTARG;;
p | -psqlSetup) postgresql_setup=${OPTARG};;
j | -javaSetup) java_setup=${OPTARG};;
m | -mavenSetup) maven_setup=${OPTARG};;
d | -projectDownload) project_download=${OPTARG};;
c | -projectCompile) project_compile=${OPTARG};;
r | -projectRun) project_run=${OPTARG};;
esac
done
при запуске скрипта ./script.sh --gitSetup=true переменная git_setup просто становится пустой. Подскажите пожалуйста в чем проблема?
Ответы (2 шт):
Автор решения: Ainar-G
→ Ссылка
Утилита getopts стандарта POSIX не
поддерживает длинные опции. Вы путаете её с GNU'шным
getopt. Примеры работы обеих утилит уже есть
в этом ответе
Автор решения: VincentVega
→ Ссылка
Помогла данная статья https://code-maven.com/bash-getopt-processing-command-line-arguments Финальное решение:
options=$(getopt --long fullInstall: --long gitSetup: --long psqlSetup: --long javaSetup: --long mavenSetup: --long projectDownload: --long projectCompile: --long projectRun: -- "$@")
[ $? -eq 0 ] || {
echo "Incorrect option provided"
exit 1
}
eval set -- "$options"
while true; do
case "$1" in
--fullInstall)
shift;
git_setup=$1
postgresql_setup=$1
java_setup=$1
maven_setup=$1
project_download=$1
project_compile=$1
;;
--gitSetup)
shift;
git_setup=$1
echo $git_setup
;;
--psqlSetup)
shift;
postgresql_setup=$1
;;
--javaSetup)
shift;
java_setup=$1
;;
--mavenSetup)
shift;
maven_setup=$1
;;
--projectDownload)
shift;
project_download=$1
;;
--projectCompile)
shift;
project_compile=$1
;;
--projectRun)
shift;