globstar: nama opsi shell tidak valid di macOS bahkan dengan bash 4.X

21

globstarOpsi baru membutuhkan bash 4. Jadi .. bashKita ini siapa?

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

Mari kita coba globstar:

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

Apakah ada cara untuk mendapatkan dukungan untuk ini di macOS?

javadba
sumber

Jawaban:

18

Masuk shoptakan memberi Anda daftar dengan semua opsi bash yang tidak termasuk globstar untuk bash Apple. Mungkin bash dikompilasi tanpa dukungan untuk opsi ini.

Untuk mendapatkan bash yang dapat dieksekusi dengan globstar install brew dan 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

Kemudian ubah shell default yang dibuka di Terminal ke / usr / local / bin / bash-terminal-app dan untuk menekan 'Anda ingin menutup tab ini?' meminta ketika menutup jendela dan tab, tambahkan 'bash' ke daftar pengecualian.

Maka daftar opsi baru:

$ 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

Dalam keadaan tertentu / usr / local / share / dan subfoldernya dimiliki oleh root (misalnya setelah menginstal smartmontools, nmap, node dll dengan installer kustom mereka) dan beberapa langkah gagal. Menurut pendapat saya itu menyimpan ke chown -Rfolder ke pengguna admin yang menginstal brew / bash. Di instalasi vanos saya yang hampir sama dengan macOS dan brew, / usr / local / share dan / usr / local / share / locale dimiliki oleh pengguna admin ini.

klanomath
sumber
yang terakhir ln -sadalah langkah yang hilang bagi saya.
javadba
1
ini tidak bekerja untuk saya. /usr/local/bin/bashtidak dibuat oleh brew. Apa itu bash-terminal-app?
glS
@klanomath Sierra 10.12.6 dan menyeduh 1.5.2. File yang dapat dieksekusi dipasang /usr/local/Cellar/...dan biasanya ditautkan /usr/local/bin. Namun untuk beberapa alasan, bashtampaknya merupakan pengecualian. brew doctormengungkapkan alasan yang mungkin sebagai yang bashtidak dapat ditautkan, tetapi jika saya mencoba brew link bashsaya mendapatkan bahwa symlink tidak dapat dibuat karena /usr/local/share/locale/ca/LC_MESSAGES is not writable. Aku memeriksa dan brewitu tidak dipasang sebagai root, seperti yang disarankan di halaman rumah.
glS
/usr/local/share/locale/ca/LC_MESSAGESmemang dimiliki oleh root sehingga tidak dapat ditulisi tanpa akses root, tapi saya tidak yakin apakah saya bisa melakukannya dengan aman chown. Apakah file ini bahkan seharusnya dimiliki oleh root?
glS
@glS Menambahkan addendum ...
klanomath