globstar: nombre de opción de shell no válido en macOS incluso con bash 4.X

21

La nueva globstaropción requiere bash 4. Entonces .. ¿En qué 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>

Probemos globstar:

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

¿Hay alguna forma de obtener soporte para esto en macOS?

javadba
fuente

Respuestas:

18

Al ingresar shoptobtendrá una lista con todas las opciones de bash que no incluye globstar para la bash de Apple. Probablemente bash se compila sin soporte para esta opción.

Para obtener un bash ejecutable con globstar, instale brew y 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

Luego cambie el shell predeterminado abierto en Terminal a / usr / local / bin / bash-terminal-app y suprima el mensaje '¿Desea cerrar esta pestaña?' cuando cierre ventanas y pestañas, agregue 'bash' a la lista de exclusiones.

La nueva lista de opciones es entonces:

$ 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

En ciertas circunstancias / usr / local / share / y sus subcarpetas son propiedad de root (por ejemplo, después de instalar smartmontools, nmap, node, etc. con sus instaladores personalizados) y algunos de los pasos fallan. En mi opinión, se guarda en chown -Rlas carpetas para el usuario administrador que instaló brew / bash. En mi instalación casi vainilla de macOS y brew, / usr / local / share y / usr / local / share / locale son propiedad de este usuario administrador.

klanomath
fuente
ese último ln -sfue el paso que faltaba para mí.
javadba
1
Esto no funciona para mí. /usr/local/bin/bashno fue creado por brew. Además, ¿qué es bash-terminal-app?
glS
@klanomath Sierra 10.12.6 y preparación 1.5.2. Los ejecutables están instalados /usr/local/Cellar/...y generalmente vinculados /usr/local/bin. Sin embargo, por alguna razón, bashparece ser una excepción. brew doctorrevela que la razón probable es que bashno se pudo vincular, pero si lo intento brew link bash, obtengo que el enlace simbólico no se pudo crear porque /usr/local/share/locale/ca/LC_MESSAGES is not writable. Verifiqué y nobrew estaba instalado como root, como se aconseja en la página de inicio.
glS
/usr/local/share/locale/ca/LC_MESSAGESde hecho es propiedad de root, por lo que no se puede escribir sin acceso de root, pero no estoy seguro de si puedo chownhacerlo de forma segura . ¿Se supone incluso que este archivo es propiedad de root?
glS
@glS Adición añadida ...
klanomath