在尝试使 Bash for OSX TAB-Auto-Completion 不区分大小写时,我按照建议运行以下命令:
shopt -s nocaseglob
bind 'set completion-ignore-case on'
如何将上述设置恢复为 OS X 默认设置?
答案1
您是说您在脚本或某个点文件(.bash_profile
等)中添加了这些命令,还是只是在终端本身中运行了这些命令?
如果您刚刚在终端中运行了命令,只需启动一个新会话,默认设置就会恢复。打开一个新的终端选项卡或窗口,看看正常功能是否恢复,应该是的。
这些设置不应影响整个系统,除非它们在每个会话加载时自动加载到文件中,在这种情况下,您可以简单地从您的.bash_profile
或最初添加该条目的地方删除该条目。
.bash_profile
您可以通过执行sudo -s
become 来仔细检查设置是否自动加载到您的系统中root
,此时root's
点文件将被加载,这些文件优先于前一个用户。如果它以 root 身份正常工作,请深入研究您自己的~/.bash_profile
或~/.bashrc
并删除这些命令/设置。下次加载 shell 会话时,应该会恢复默认功能。
答案2
第一个解决方案
为了恢复你的情况必须知道前一个。
命令bind
和shopt
是如此舒适在他们提出的几个选项中,有一个(-p
对于第一个和-v
第二个)给出了以几乎可直接使用的格式输出以恢复它们:
shopt -p | grep nocaseglob # shopt -u nocaseglob
bind -v | grep completion-ignore-case # set completion-ignore-case off
输出结果在符号后面报告#
。
一旦您知道了起始值,就可以创建几个别名,将其放入忽略更多(IgnoreGo
)并从中出来(IgnoreExit
):
alias IgnoreGo="shopt -s nocaseglob; bind 'set completion-ignore-case on'"
alias IgnoreExit="shopt -u nocaseglob; bind 'set completion-ignore-case off'"
你可以把这个别名和你的配置 shell 的其他别名放在一起(通常在~/.bash_aliases
或中~/.bashrc
),并在需要时使用。问题是那些人是盲目的,他们看不到你的 shell 的实际情况。
更好的解决方案
为了让这一切独立于您对这些变量值的了解,并且稍微复杂一点,您可以创建一个函数(Store
)来创建一个别名(ReStore
)来返回,无论最初的情况是什么。
Store(){ alias ReStore="$(shopt -p|grep nocaseglob); \
bind '$(bind -v|grep completion-ignore-case)'"; }
甚至可以将其写入 shell 的配置文件中(见上文)。每次使用时,Store
您都会冻结实际情况,然后ReStore
使用时重新建立上一次冻结。
请注意, 必须\
是行的最后一个字符,以便将命令以更易读的格式分成两行。
笔记
在我的系统上,要完成一个命令(例如使用 进行导航cd
),只需提供 来bind 'set completion-ignore-case on'
启用忽略大小写,即使nocaseglob
是也是如此off
。nocaseglob
路径名扩展需要 on。 它甚至存在nocasematch
于模式中。help bash
阅读更多...
命令帮助
命令bind
和shopt
是 shell 内置的。这意味着,要向手册询问它们的用法,您需要使用help
而不是man
。
要获得仅供人类阅读的输出,您可以使用
shopt | grep nocaseglob # nocaseglob on
bind -V | grep completion-ignore-case # completion-ignore-case is set to `off'
答案3
正如所读Bash 手册 # 4.3.2 内置 Shopt,这是启用/禁用值的方法shopt
:
-s→ 启用(设置)每个 optname。
-u→ 禁用(取消设置)每个 optname。
类似地,你可以completion-ignore-case
使用以下命令禁用该选项:
bind 'set completion-ignore-case off'