Как я могу заключить 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. Альтернативно, если вы хотите улучшить переносимость, вы можете перевернуть свою длинную обработку аргументов.
Поместите некоторый код, и мы поможем его отладить.