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?

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.