globstar: nieprawidłowa nazwa opcji powłoki w systemie macOS, nawet w wersji bash 4.X

22

Nowa globstaropcja wymaga bash 4. Więc .. Na czym bashjesteśmy?

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

Wypróbujmy globstar:

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

Czy jest jakiś sposób na uzyskanie wsparcia dla tego systemu na macOS?

javadba
źródło

Odpowiedzi:

19

Po wejściu shoptotrzymasz listę ze wszystkimi opcjami bash, która nie obejmuje globstar dla bash Apple. Prawdopodobnie bash jest kompilowany bez obsługi tej opcji.

Aby uzyskać wykonywalny bash z globstar zainstaluj brew i bash brow:

$ 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

Następnie zmień domyślną powłokę otwartą w Terminalu na / usr / local / bin / bash-terminal-app i pomiń „Czy chcesz zamknąć tę kartę?” pytaj przy zamykaniu okien i kart, dodaj „bash” do listy wykluczeń.

Nowa lista opcji to:

$ 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

W pewnych okolicznościach / usr / local / share / i jego podfoldery są własnością root'a (np. Po zainstalowaniu smartmontools, nmap, node itp. Z ich niestandardowymi instalatorami) i niektóre etapy kończą się niepowodzeniem. Moim zdaniem jest to zapisywane chown -Rw folderach dla administratora, który zainstalował brew / bash. W mojej prawie waniliowej instalacji macOS i brew, / usr / local / share i / usr / local / share / locale są własnością tego administratora.

klanomath
źródło
to ln -sbył dla mnie brakujący krok.
javadba
1
to nie działa dla mnie. /usr/local/bin/bashnie został stworzony przez brew. Co to jest bash-terminal-app?
glS
@klanomath Sierra 10.12.6 i napar 1.5.2. Pliki wykonywalne są instalowane /usr/local/Cellar/...i zwykle łączone w /usr/local/bin. Z jakiegoś powodu bashwydaje się jednak wyjątkiem. brew doctorujawnia prawdopodobny powód, dla bashktórego nie można było powiązać, ale jeśli spróbuję, dowiaduję brew link bashsię, że nie można utworzyć dowiązania symbolicznego, ponieważ /usr/local/share/locale/ca/LC_MESSAGES is not writable. Sprawdziłem i brewbył nie zainstalowany jako root, zgodnie z zaleceniami na stronie głównej.
glS
/usr/local/share/locale/ca/LC_MESSAGESjest rzeczywiście własnością roota, więc nie można go zapisać bez dostępu do niego, ale nie jestem pewien, czy mogę to bezpiecznie chownzrobić. Czy ten plik ma być nawet własnością root?
glS
@glS Dodano addendum ...
klanomath