globstar: nome opzione shell non valido su macOS anche con bash 4.X


21

La nuova globstaropzione richiede bash 4. Quindi .. A chi bashsiamo?

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

Proviamo globstar:

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

Esiste un modo per ottenere supporto per questo su macOS?

Risposte:


18

Entrando shoptotterrai un elenco con tutte le opzioni di bash che non include globstar per bash di Apple. Probabilmente bash è compilato senza supporto per questa opzione.

Per ottenere un eseguibile bash con globstar install brew e 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

Quindi cambia la shell predefinita aperta in Terminale in / usr / local / bin / bash-terminal-app e per sopprimere "Vuoi chiudere questa scheda?" quando si chiudono finestre e schede, aggiungere "bash" all'elenco delle esclusioni.

Il nuovo elenco di opzioni è quindi:

$ 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

In determinate circostanze / usr / local / share / e le sue sottocartelle sono di proprietà di root (ad es. Dopo aver installato smartmontools, nmap, node ecc. Con i loro programmi di installazione personalizzati) e alcuni passaggi falliscono. A mio avviso, viene salvato chown -Rnelle cartelle per l'utente amministratore che ha installato brew / bash. Nella mia installazione quasi vaniglia di macOS e brew, / usr / local / share e / usr / local / share / locale sono di proprietà di questo utente amministratore.


quell'ultimo è ln -sstato il passo mancante per me.
javadba,

1
questo non funziona per me. /usr/local/bin/bashnon è stato creato da brew. Inoltre, cos'è bash-terminal-app?
glS

@klanomath Sierra 10.12.6 e birra 1.5.2. Gli eseguibili sono installati /usr/local/Cellar/...e generalmente collegati /usr/local/bin. Per qualche motivo, tuttavia, bashsembra essere un'eccezione.brew doctorrivela la probabile ragione che bashnon è possibile collegare, ma se provo brew link bashcapisco che non è possibile creare il collegamento simbolico perché /usr/local/share/locale/ca/LC_MESSAGES is not writable. Ho controllato e nonbrew è stato installato come root, come consigliato nella home page.
glS

/usr/local/share/locale/ca/LC_MESSAGESè effettivamente di proprietà di root, quindi non scrivibile senza accesso root, ma non sono sicuro di poterlo tranquillamente chown. Si suppone che questo file sia di proprietà di root?
glS

@glS Aggiunta aggiunta ...
klanomath,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.