1 votes

Impossible de lire l'argument de ligne de commande dans un script shell en utilisant getopt dans le terminal OS X

Je suis en train d'essayer d'écrire un programme (en utilisant un script shell ou un script bash) qui accepte des arguments de ligne de commande en utilisant getopt.

Cela fonctionne bien dans le terminal Linux mais lorsque je l'utilise dans le terminal OS X, il n'arrive pas à lire les arguments de ligne de commande fournis.

Un code d'exemple :

OPTS=`getopt -o f:l: --long FirstName:,LastName: -n 'parse-options' --   "$@"`
if [ $? != 0 ] ; then echo "Échec de l'analyse des 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 

Entrée :

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

Sortie sur Linux (FC19):

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

LastName=bar

Sortie sur Mac :

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

LastName=

1voto

nohillside Points 82672

Voir man getopt. Fondamentalement, le getopt qui fait partie de macOS ne prend pas en charge les noms d'options longs. Utiliser

OPTS=`getopt f:l: $*`

fonctionne comme prévu.

PS : La page man recommande également d'utiliser $* au lieu de "$@" mais cela n'a pas de rapport avec votre problème.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X