2012-08-28 5 views
6

Voglio fare in modo che il mio script di bash abbia a che fare con lunghi parametri. Ho trovato getopt, ma non è supportato in OS X. Qualcuno può dirmi perché getopt è stato implementato da BSD, ma non GNU? Ho provato a creare getopt in GNU C lib, ma non è riuscito a far fronte alle mie scarse capacità con Linux.Come posso fare in modo che bash si occupi di param lunghi usando il comando "getopt" in mac?

Qualcuno ha fatto questo lavoro?

+0

possibile duplicato del [Utilizzare getopts in bash script di shell per ottenere lunghe e brevi opzioni da riga di comando] (http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line- opzioni) – ghoti

risposta

1

In genere, è preferibile utilizzare getopts e attenersi alle opzioni brevi. Puoi vedere getopts in azione in this StackOverflow Q&A. Le opzioni brevi sono più standard in tutti gli strumenti a riga di comando OSX e la coerenza è una buona cosa.

Inoltre, getopts è incorporato in bash, quindi è sicuramente disponibile in OSX, così come ogni altra piattaforma che può eseguire bash.

Nota che c'è un getopt disponibile anche in OSX. Da terminale, digitare man getopt per visualizzare la relativa documentazione. Non supporta le opzioni lunghe. Questa è una buona ragione per non utilizzare lunghe opzioni quando si scrivono strumenti per l'esecuzione su OSX.

Se si desidera comunque, è possibile installare getopt da macports. In alternativa, se si desidera una portabilità migliore, è possibile eseguire la gestione del proprio lungo argomento.

Invia un po 'di codice e ti aiuteremo a eseguirne il debug.

10

C'è un brew bottle for getopt.

Basta eseguire brew install gnu-getopt.

È possibile specificare il percorso per esso come /usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt

o utilizzare brew link --force gnu-getopt in modo che sarà collegato in /usr/local/bin/

Basta essere consapevoli che costringe il collegamento potrebbe essere corrompere il sistema (come si sostituisce il sistema getopt by the gnu one).

0

mi consiglia di utilizzare Homebrew installare gnu-getopt e quindi aggiungendo $FLAGS_GETOPT_CMD al ~/.bash_profile file per indicare il percorso cmd per getopt, indicando la posizione homebrew, in questo modo:

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

Mi piace come le persone non valgono nulla ma forniscono commenti ZERO sul perché ... tsk tsk – sMyles

Problemi correlati