Non è possibile leggere l'argomento della riga di comando nello script di shell usando getopt in OS X Terminal

0

Sto provando a scrivere un programma (usando lo script di shell o lo script di bash) che accetta l'argomento della riga di comando usando getopt.

Funziona bene sul terminale Linux ma quando lo sto usando su OS X Terminal non è in grado di leggere l'argomento della riga di comando fornito.

un codice di esempio:

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 

Input:

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

Output su Linux (FC19):

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

LastName=bar

Output su Mac:

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

LastName=
    
posta Anuj 01.12.2016 - 08:22
fonte

1 risposta

0

Vedi man getopt . Fondamentalmente il getopt che fa parte di macOS non supporta i nomi di opzioni lunghe. Usando

OPTS='getopt f:l: $*'

funziona come previsto.

PS: la pagina man consiglia anche di utilizzare $* anziché "$@" , ma questo non è correlato al tuo problema.

    
risposta data 01.12.2016 - 09:03
fonte

Leggi altre domande sui tag