如何使用 shopt 自定义 Bash Shell

已发表: 2022-01-29
Linux 笔记本电脑上的终端提示符。
Fatmawati Achmad Zaenuri/Shutterstock

如果您使用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选项设置为打开时,您需要小心使用rmmv

nocaseglob 选项

nocaseglob选项类似于dotglob选项,除了nocaseglob会导致文件名和目录中大小写字母的差异在名称扩展中被忽略。

我们键入以下内容来查找以“how”开头的文件或目录:

 怎么做*

找到并列出了一个文件。 我们键入以下内容以打开nocaseglob选项:

 shopt -s nocaseglob

然后,我们重复ls命令:

 怎么做* 

找到两个文件,其中一个包含大写字母。

使更改永久化

我们所做的更改只会持续到我们关闭当前的 Bash shell。 为了使它们在不同的 shell 会话中永久存在,我们需要将它们添加到我们的“.bashrc”文件中。

广告

在您的主目录中,键入以下命令以在图形 Gedit 文本编辑器中打开“.bashrc”文件(或相应地更改它以使用您喜欢的编辑器):

 gedit .bashrc

gedit编辑器将打开并加载“.bashrc”文件。 您会看到其中已经有一些shopt条目。

加载了 .bashrc 的 gedit 编辑器,并突出显示了 shopt 选项。

您也可以在此处添加自己的shopt选项。 添加它们后,保存更改并关闭编辑器。 现在,每当您打开新的 Bash shell 时,都会为您设置选项。

眼见为实的选择

确实, shopt命令有很多选项,但如果有的话,您不必一次就掌握它们。 既然有这么多,可能有一些你不会感兴趣。

例如,有一些强制 Bash 以与特定的旧版本兼容的方式运行。 这可能对某人有用,但这是一个相当小众的案例。

广告

您可以查看 Bash 手册页或 GNU Bash 参考手册。 确定哪些选项会对您产生影响,然后进行试验。 请注意影响文件和目录名称扩展方式的选项。 使用良性命令(例如ls )尝试它们,直到您对它们感到满意为止。