No se puede leer el argumento de la línea de comandos en el script de shell con getopt en OS X Terminal

0

Estoy tratando de escribir un programa (usando shell script o bash script) que acepte el argumento de la línea de comandos usando getopt.

Funciona bien en el terminal de Linux, pero cuando lo estoy usando en el terminal OS X no puedo leer el argumento de la línea de comandos provisto.

un código de muestra:

OPTS='getopt -o f:l: --long FirstName:,LastName: -n 'parse-options' --   "$@"'
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
echo "$OPTS"
eval set -- "$OPTS"
NEWLINE=$'\n'
while true; do
case "$1" in
  -f | --FirstName ) FirstName="$2" ; shift 2 ;;
  -l | --LastName ) LastName="$2" ; shift 2 ;;
  -- ) shift; break ;;
  * ) break ;;
esac
done
echo "${NEWLINE}"
echo "--------------------------------------------"
echo "FirstName=$FirstName"
echo "LastName=$LastName"
echo "${NEWLINE}"
sleep 1 

Entrada:

sh try.sh --FirstName foor --LastName bar

Salida en Linux (FC19):

--------------------------------------------
FirstName=foor

LastName=bar

Salida en Mac:

--------------------------------------------
FirstName=

LastName=
    
pregunta Anuj 01.12.2016 - 08:22

1 respuesta

0

Ver man getopt . Básicamente, el getopt que forma parte de macOS no admite nombres de opción largos. Utilizando

OPTS='getopt f:l: $*'

funciona como se esperaba.

PS: La página de manual también recomienda usar $* en lugar de "$@" , pero esto no está relacionado con tu problema.

    
respondido por el nohillside 01.12.2016 - 09:03

Lea otras preguntas en las etiquetas