2012-08-28 11 views
6

Quiero hacer que mi script bash se ocupe de los parámetros largos. Encontré getopt, pero no es compatible con OS X. ¿Alguien puede decirme por qué getopt fue implementado por BSD, pero no GNU? Intenté construir getopt en GNU C lib, pero falló por mis pobres habilidades con Linux.¿Cómo puedo hacer frente a bash con param largo usando el comando "getopt" en mac?

¿Alguien hizo este trabajo?

+0

posible duplicado de [Utilización getopts en bash shell script para obtener opciones de línea de comandos largas y cortas] (http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line- opciones) – ghoti

Respuesta

1

Por lo general, es una mejor idea usar getopts en su lugar, y apegarse a las opciones cortas. Puede ver getopts en acción en this StackOverflow Q&A. Las opciones cortas son más estándar en todas las herramientas de línea de comandos de OSX, y la consistencia es algo bueno.

Además, getopts está integrado en bash, por lo que definitivamente está disponible en OSX, así como en cualquier otra plataforma que pueda ejecutar bash.

Tenga en cuenta que hay un getopt también está disponible en OSX. Desde Terminal, escriba man getopt para ver su documentación. No admite opciones largas. Esta es una buena razón para no usar opciones largas cuando está escribiendo herramientas para ejecutar en OSX.

Si desea hacer esto de todos modos, puede instalar getopt desde macports. Alternativamente, si desea una mejor portabilidad, puede desplegar su propio manejo de argumentos largos.

Publique un código y le ayudaremos a depurarlo.

10

Hay un brew bottle for getopt.

Solo ejecuta brew install gnu-getopt.

puede especificar la ruta de acceso por ella como /usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt

o uso brew link --force gnu-getopt por lo que estará vinculado en /usr/local/bin/

Sólo ten en cuenta que forzar la vinculación podría corromper el sistema (ya que sustituye el sistema de getopt por el gnu uno).

0

recomiendo el uso de Homebrew para instalar gnu-getopt y luego añadiendo $FLAGS_GETOPT_CMD a su archivo ~/.bash_profile para especificar la ruta cmd para getopt, señalando la ubicación del homebrew, así:

brew install gnu-getopt 
sudo echo 'export FLAGS_GETOPT_CMD="$(brew --prefix gnu-getopt)/bin/getopt"' >> ~/.bash_profile 
. ~/.bash_profile 
+0

Me encanta cómo las personas menos votaron pero proporcionan CERO comentarios sobre por qué ... tsk tsk – sMyles

Cuestiones relacionadas