2012-08-28 8 views
6

Chcę, aby mój skrypt basha zajmował się długimi parametrami. Znalazłem getopt, ale nie jest ono obsługiwane w OS X. Czy ktoś może mi powiedzieć, dlaczego getopt zostało zaimplementowane przez BSD, ale nie GNU? Próbowałem budować getopt w bibliotece GNU C, ale nie udało mi się to z powodu moich słabych umiejętności w Linuksie.W jaki sposób mogę uczynić bash traktować z długim parametrem za pomocą polecenia "getopt" w mac?

Czy ktoś wykonał tę pracę?

+0

możliwym duplikatu [Using getopts w bash skrypt powłoki, aby uzyskać długie i krótkie opcje wiersza poleceń] (http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line- opcje) – ghoti

Odpowiedz

1

Zasadniczo lepszym rozwiązaniem jest użycie getopts i stosowanie krótkich opcji. Możesz zobaczyć getopts w akcji w this StackOverflow Q&A. Krótkie opcje są bardziej standardowe w narzędziach wiersza poleceń systemu OSX, a spójność to dobra rzecz.

Ponadto, getopts jest wbudowany w bash, więc jest zdecydowanie dostępny w OSX, a także na każdej innej platformie, na której można uruchomić bash.

Zauważ, że istnieje getopt jest również dostępny w systemie OSX. Z Terminalu wpisz man getopt, aby zobaczyć jego dokumentację. Nie obsługuje długich opcji. Jest to dobry powód, aby nie używać długich opcji podczas pisania narzędzi do uruchamiania w systemie OSX.

Jeśli jednak chcesz to zrobić, możesz zainstalować getopt z macports. Alternatywnie, jeśli chcesz mieć lepszą przenośność, możesz przetaczać własną długą obsługę argumentów.

Napisz kod, a pomożemy go zdebugować.

10

Istnieje brew bottle for getopt.

Po prostu uruchom brew install gnu-getopt.

Można też podać ścieżkę do niego jak /usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt

Albo użyć brew link --force gnu-getopt tak zostanie on połączony w /usr/local/bin/

Wystarczy mieć świadomość, że zmuszanie powiązanie może być zepsucie systemu (jak to zastępuje system getopt przez gnu).

0

Polecam używanie Homebrew zainstalować gnu-getopt a następnie dodając $FLAGS_GETOPT_CMD do pliku ~/.bash_profile określenia cmd ścieżkę getopt, wskazując na homebrew lokalizacji, tak jak poniżej:

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

Uwielbiam sposób, w jaki ludzie biorą udział, ale dostarczają ZERA komentarze, dlaczego ... tsk tsk – sMyles

Powiązane problemy