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.