globstar: неверное имя опции оболочки в macOS даже с bash 4.X


22

Новый globstarвариант требует bash 4. Итак ... Что bashмы находимся?

 $bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Давайте попробуем globstar:

13:39:28/forecast-fresh $shopt -s globstar
-bash: shopt: globstar: invalid shell option name
13:39:32/forecast-fresh $

Есть ли способ получить поддержку для этого на macOS?

Ответы:


19

При shoptвходе вы получите список со всеми опциями bash, который не включает globstar для bash от Apple. Вероятно, bash компилируется без поддержки этой опции.

Чтобы получить исполняемый файл bash с globstar, установите brew и bash bash:

$ brew install bash
$ chsh -s /usr/local/bin/bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ ln -s /usr/local/bin/bash /usr/local/bin/bash-terminal-app

Затем измените оболочку по умолчанию, открытую в Терминале, на / usr / local / bin / bash-Terminal-app и отключите «Вы хотите закрыть эту вкладку?» подсказка при закрытии окон и вкладок, добавить 'bash' в список исключений.

Новый список параметров тогда:

$ shopt
autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       off
checkwinsize    on
cmdhist         on
compat31        off
compat32        off
compat40        off
compat41        off
compat42        off
compat43        off
complete_fullquote  on
direxpand       off
dirspell        off
dotglob         off
execfail        off
expand_aliases  on
extdebug        off
extglob         off
extquote        on
failglob        off
force_fignore   on
globasciiranges off
globstar        off
gnu_errfmt      off
histappend      off
histreedit      off
histverify      off
hostcomplete    on
huponexit       off
inherit_errexit off
interactive_comments    on
lastpipe        off
lithist         off
login_shell     on
mailwarn        off
no_empty_cmd_completion off
nocaseglob      off
nocasematch     off
nullglob        off
progcomp        on
promptvars      on
restricted_shell    off
shift_verbose   off
sourcepath      on
xpg_echo        off

При определенных обстоятельствах / usr / local / share / и его подпапки принадлежат пользователю root (например, после установки smartmontools, nmap, node и т. Д. С их пользовательскими установщиками), и некоторые из этапов не выполняются. На мой взгляд, это сохраняет chown -Rв папки пользователя с правами администратора, который установил brew / bash. В моей почти полной установке macOS и brew этот пользователь-администратор принадлежит / usr / local / share и / usr / local / share / locale.


последний ln -sбыл для меня пропущенным шагом.
Джавадба

1
это не работает для меня. /usr/local/bin/bashне был создан brew. Кроме того, что это bash-terminal-app?
GLS

@klanomath Sierra 10.12.6 и варево 1.5.2. Исполняемые файлы устанавливаются /usr/local/Cellar/...и обычно связаны в /usr/local/bin. По какой-то причине, bashкажется, является исключением. brew doctorвыявляет вероятную причину, которая bashне может быть связана, но если я попытаюсь, brew link bashя получаю, что символическая ссылка не может быть создана, потому что /usr/local/share/locale/ca/LC_MESSAGES is not writable. Я проверил и неbrew был установлен как root, как советовали на домашней странице.
GLS

/usr/local/share/locale/ca/LC_MESSAGESдействительно принадлежит root, поэтому без прав на запись он не доступен для записи, но я не уверен, смогу ли я просто безопасно chownэто сделать. Предполагается ли, что этот файл принадлежит root?
GLS

@glS Добавлено приложение ...
klanomath
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.