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, який не включає глобстар для башти Apple. Можливо, bash складено без підтримки цієї опції.

Для отримання виконавчого файлу bash з globstar встановіть brew та brew's 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

Потім змініть оболонку за замовчуванням, відкриту в Terminal, на / 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 і варити, / usr / local / share та / usr / local / share / locale належать цьому користувачеві адміністратора.


що останній ln -sбув для мене пропущеним кроком.
javadba

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насправді належить корінь, тому не доступний для запису без доступу до кореня, але я не впевнений, чи зможу я безпечно просто chownце зробити. Чи повинен цей файл належати root?
glS

@glS Додано додаток ...
klanomath
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.