globstar:即使使用bash 4.X,macOS上的外壳程序选项名称也无效


21

globstar选项要求bash 4。所以.. bash我们在哪?

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

让我们尝试一下globstar

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

有什么方法可以在macOS上获得对此的支持吗?

Answers:


18

输入shopt将获得包含所有bash选项的列表,其中不包括Apple bash的globstar。bash可能在不支持此选项的情况下进行了编译。

要使用globstar获得bash可执行文件,请安装brew和brew的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

然后将在Terminal中打开的默认Shell更改为/ usr / local / bin / bash-terminal-app并取消选择“是否要关闭此选项卡?”。在关闭窗口和选项卡时提示,将“ bash”添加到排除列表中。

新的选项列表如下:

$ 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

在某些情况下,/ usr / local / share /及其子文件夹是root拥有的(例如,在使用其自定义安装程序安装smartmontools,nmap,node等之后),并且某些步骤失败。在我看来,它已保存到chown -R安装brew / bash的admin用户的文件夹中。在我几乎原始的macOS和brew安装中,/ usr / local / share和/ usr / local / share / locale属于该管理员用户。


最后ln -s那一步对我来说是缺失的。
javadba

1
这对我不起作用。/usr/local/bin/bash不是由创建的brew。另外,什么是bash-terminal-app
glS

@klanomath Sierra 10.12.6和brew 1.5.2。可执行文件安装在中/usr/local/Cellar/...通常链接到中/usr/local/bin。但是由于某种原因,这bash似乎是个例外。brew doctor揭示了可能bash无法链接的原因,但是如果我尝试尝试brew link bash,则无法创建符号链接/usr/local/share/locale/ca/LC_MESSAGES is not writable。我检查,brew不是在主页建议安装为根。
glS

/usr/local/share/locale/ca/LC_MESSAGES确实是由root拥有的,因此没有root访问权限就无法写,但是我不确定是否可以安全地使用chown它。该文件是否甚至应该由root拥有?
glS

@glS添加了附录...
klanomath
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.