Как я могу заключить bash с длинным параметром, используя команду getopt в mac?

Я хочу, чтобы мой bash script имел дело с длинными параметрами. Я нашел getopt, но он не поддерживается в OS X. Может ли кто-нибудь сказать мне, почему getopt был реализован BSD, но не GNU? Я попытался построить getopt в GNU C lib, но это не помогло моим слабым навыкам с Linux.

Кто-нибудь сделал это?

Ответ 1

Для гетопта есть варево-бутылка.

Просто запустите brew install gnu-getopt.

Вы можете указать путь к нему, например /usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt

Или используйте brew link --force gnu-getopt чтобы она была связана в /usr/local/bin/

Просто помните, что принудительное связывание может повредить вашу систему (так как она заменяет системный getopt на gnu).

Смотрите также другой ответ, предлагающий определить FLAGS_GETOPT_CMD.

Ответ 2

Я рекомендую использовать Homebrew для установки gnu-getopt а затем добавить $FLAGS_GETOPT_CMD в файл ~/.bash_profile чтобы указать путь cmd для getopt, указывающий на местоположение homebrew, например, так:

brew install gnu-getopt

Затем следуйте инструкциям от brew, чтобы добавить к вашему локальному пути:

sudo echo 'export PATH="/usr/local/opt/gnu-getopt/bin:$PATH"' >> ~/.bash_profile

Затем вы можете добавить FLAGS_GETOPT_CMD:

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

Откройте новый терминал или запустите . ~/.bash_profile . ~/.bash_profile в существующем терминале для загрузки изменений

Запустите echo $FLAGS_GETOPT_CMD чтобы убедиться, что он действительно установлен в вашей консоли

Ответ 3

Как правило, лучше использовать getopts вместо этого и придерживаться коротких опций. Вы можете увидеть getopts в действии в этом StackOverflow Q & A. Короткие опции более стандартизированы в инструментах командной строки OSX, а согласованность - хорошая вещь.

Кроме того, getopts встроен в bash, поэтому он определенно доступен в OSX, а также для любой другой платформы, которая может запускать bash.

Обратите внимание, что в OSX имеется getopt. Из терминала введите man getopt, чтобы просмотреть его документацию. Он не поддерживает длинные варианты. Это хорошая причина не использовать длинные опции при написании инструментов для работы в OSX.

Если вы все равно хотите это сделать, вы можете установить getopt из macports. Альтернативно, если вы хотите улучшить переносимость, вы можете перевернуть свою длинную обработку аргументов.

Поместите некоторый код, и мы поможем его отладить.