globstar: nome de opção de shell inválido no macOS, mesmo com o bash 4.X

21

A nova globstaropção requer bash 4. Então .. Em que bashestamos?

 $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>

Vamos experimentar globstar:

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

Existe alguma maneira de obter suporte para isso no macOS?

javadba
fonte

Respostas:

18

Ao shoptentrar, você obterá uma lista com todas as opções do bash, que não incluem o globstar para o bash da Apple. Provavelmente o bash é compilado sem suporte para esta opção.

Para obter um executável bash com a globstar, instale o brew e o bash do brew:

$ 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

Em seguida, altere o shell padrão aberto no Terminal para / usr / local / bin / bash-terminal-app e suprima a opção 'Deseja fechar esta guia?' Quando fechar janelas e guias, adicione 'bash' à lista de exclusões.

A nova lista de opções é então:

$ 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

Sob certas circunstâncias, / usr / local / share / e suas subpastas pertencem à raiz (por exemplo, após a instalação de smartmontools, nmap, nó etc. com seus instaladores personalizados) e algumas das etapas falham. Na minha opinião, é salvo chown -Rnas pastas do usuário administrador que instalou o brew / bash. Na minha instalação quase completa do macOS e do brew, / usr / local / share e / usr / local / share / locale pertencem a este usuário administrador.

Klanomath
fonte
esse último ln -sfoi o passo que faltava para mim.
Javadba 18/07
1
isso não funciona para mim. /usr/local/bin/bashnão foi criado por brew. Além disso, o que é bash-terminal-app?
18118 glS
@klanomath Sierra 10.12.6 e brew 1.5.2. Os executáveis ​​são instalados /usr/local/Cellar/...e geralmente vinculados /usr/local/bin. Por alguma razão, porém, bashparece ser uma exceção. brew doctorrevela a provável razão de ser que bashnão pôde ser vinculada, mas se eu tentar brew link bash, entendo que o link simbólico não pôde ser criado porque /usr/local/share/locale/ca/LC_MESSAGES is not writable. Eu verifiquei e nãobrew fui instalado como root, conforme recomendado na página inicial.
glS 02/02
/usr/local/share/locale/ca/LC_MESSAGESé de fato propriedade do root, portanto não é gravável sem acesso ao root, mas não tenho certeza se posso seguramente justificá- chownlo. Esse arquivo é de propriedade do root?
21418 glS
@glS Adendo adicionado ...
klanomath 02/02