如何使用 shopt 自定义 Bash Shell
已发表: 2022-01-29 如果您使用shopt
微调 Bash shell 的行为,您可以控制超过 50 种设置。 我们将向您展示如何按照您喜欢的方式定制您的 Linux 系统。
shopt 内置
内置的shopt
是所有版本的 Bash shell 的一部分,因此无需安装任何东西。 多年来, shopt
中可用的选项数量稳步增加。 因此,您拥有的 Bash 版本越旧, shopt
选项列表就越短。
如果您的机器上似乎没有运行,请检查 Bash 的man
页条目并验证该选项在您的shopt
版本中可用。
我们涵盖了以下所有shopt
选项。 我们还描述了如何使用它并分享一些示例。 从那里,您可以查看 Bash 手册页或 GNU Bash 参考手册,看看这些选项是否有用或有吸引力。
一些shopt
选项默认启用,并构成 Bash 默认行为的一部分。 您可以启用shopt
选项作为对 Bash 的短期更改。 然后,当您关闭 shell 时,它将恢复为默认行为。
但是,如果您希望每次启动 Bash shell 时都可以使用修改后的行为,则可以使更改永久生效。
商店选项
有 53 个shopt
选项。 如果您使用不带任何选项的shopt
命令,它会列出这些。 如果我们通过wc
命令管道输出,它将为我们计算行数、单词数和字符数。 因为每个shopt
选项都在自己的行上,所以行数就是选项数。
我们输入以下内容:
店铺 | 厕所
要查看所有选项,我们可以通过column
命令管道输出以在列中显示选项名称,或者我们可以将其通过管道传输到less
中。
我们输入以下内容:
店铺 | 柱子
在 Linux 手册中查找 shopt
讨论shopt
及其选项的部分位于 Linux 手册的 Bash 部分。 Bash 部分的长度超过 6,000 行。 您可以通过大量滚动找到shopt
的描述,或者您可以在手册中搜索它。
为此,请在 Bash 部分打开手册:
男子重击
在手册中,按/
开始搜索。 键入以下内容,然后按 Enter:
assoc_expand_once
shopt
选项部分的开头将出现在man
窗口中。
相关:如何使用 Linux 的 man 命令:隐藏的秘密和基础
设置和取消设置选项
要设置和取消设置shopt
选项,请使用以下命令:
- -s :设置或启用。
- -u :取消设置或禁用。
由于默认情况下启用了某些选项,因此检查哪些选项处于打开状态也很方便。 您可以使用-s
和-u
选项来执行此操作,而无需使用选项名称。 这会导致shopt
列出打开和关闭的选项。
键入以下内容:
商店-s
商店-u | 柱子
您可以使用不带-s
或-u
命令的shopt
选项来查看每个选项的打开或关闭状态。
例如,我们可以键入以下内容来检查histverify
选项的设置:
购物历史验证
我们可以键入以下内容将其设置为打开:
shopt -s histverify
然后,我们可以输入以下内容再次检查:
购物历史验证
histverify
选项更改history
命令的一个方面的操作方式。 通常,如果您要求history
通过数字引用来重复命令,例如!245
,则从命令历史中检索该命令并立即执行。
如果您希望查看某个命令以确保它是您所期望的并对其进行编辑,如有必要,请键入以下内容以将shopt histverify
选项设置为 on:
!245
该命令被检索并显示在命令行上。 您可以通过按 Enter 来删除、编辑或执行它。
相关:如何在 Linux 上使用 history 命令
autocd 选项
在autocd
选项设置为 on 的情况下,如果您在命令行中键入目录的名称并按 Enter,它将被视为您在其前面键入了cd
。
我们键入以下内容以打开autocd
选项:
shopt -s autocd
然后,我们输入目录的名称:
文件
cdspell 选项
当cdspell
选项打开时,Bash 将自动纠正简单的拼写错误和目录名称中的拼写错误。
我们键入以下内容来设置cdspell
选项:
shopt -s cdspell
要尝试更改为应具有大写首字母的小写目录,我们键入以下内容:
光盘文件
然后,我们可以键入以下内容来尝试使用名称中带有额外“t”的目录名称:
cd ../图片
无论拼写错误如何,Bash 都会更改为每个目录。
xpg_echo 选项
当xpg_echo
选项设置为 on 时,echo 命令将遵循转义字符,例如\n
表示换行符, \t
表示水平制表符。
首先,我们键入以下内容以确保已设置该选项:
shopt -s xpg_echo
然后我们将\n
包含在我们要传递给echo
的字符串中:
echo "这是第一行\n这是第二行"
转义的换行符强制在输出中换行。
这会产生与-e
(启用转义解释) echo
选项相同的行为,但xpg_echo
允许它成为默认操作。
相关:如何在 Linux 上使用 Echo 命令
dotglob 选项
应该谨慎对待dotglob
选项。 它允许以句点 ( .
) 开头的文件和目录包含在名称扩展或“通配符”中。 这些被称为“点文件”或“点目录”,它们通常是隐藏的。 dotglob
选项忽略其名称开头的点。
首先,我们将通过键入以下内容来搜索以“geek”结尾的文件或目录:
ls *极客
找到并列出了一个文件。 然后,我们将通过键入以下内容打开dotglob
选项:
shopt -s dotglob
我们发出相同的ls
命令来查找以“geek”结尾的文件和目录:
ls *极客
这次找到并列出了两个文件,其中一个是点文件。 当您将dotglob
选项设置为打开时,您需要小心使用rm
和mv
。
nocaseglob 选项
nocaseglob
选项类似于dotglob
选项,除了nocaseglob
会导致文件名和目录中大小写字母的差异在名称扩展中被忽略。
我们键入以下内容来查找以“how”开头的文件或目录:
怎么做*
找到并列出了一个文件。 我们键入以下内容以打开nocaseglob
选项:
shopt -s nocaseglob
然后,我们重复ls
命令:
怎么做*
找到两个文件,其中一个包含大写字母。
使更改永久化
我们所做的更改只会持续到我们关闭当前的 Bash shell。 为了使它们在不同的 shell 会话中永久存在,我们需要将它们添加到我们的“.bashrc”文件中。
在您的主目录中,键入以下命令以在图形 Gedit 文本编辑器中打开“.bashrc”文件(或相应地更改它以使用您喜欢的编辑器):
gedit .bashrc
gedit
编辑器将打开并加载“.bashrc”文件。 您会看到其中已经有一些shopt
条目。
您也可以在此处添加自己的shopt
选项。 添加它们后,保存更改并关闭编辑器。 现在,每当您打开新的 Bash shell 时,都会为您设置选项。
眼见为实的选择
确实, shopt
命令有很多选项,但如果有的话,您不必一次就掌握它们。 既然有这么多,可能有一些你不会感兴趣。
例如,有一些强制 Bash 以与特定的旧版本兼容的方式运行。 这可能对某人有用,但这是一个相当小众的案例。
您可以查看 Bash 手册页或 GNU Bash 参考手册。 确定哪些选项会对您产生影响,然后进行试验。 请注意影响文件和目录名称扩展方式的选项。 使用良性命令(例如ls
)尝试它们,直到您对它们感到满意为止。