使用bash的shopt内置来管理Linux shell行为

内置的shopt提供了53个可以改变bash行为的设置。请阅读这篇文章,然后参考bash的手册页,以进一步了解这些设置如何为您工作。

有个足球雷竞技app网络世界/ IDG

如果你还没有尝试过它,你可能会对它的许多特性感到惊讶shopt。虽然它的工作方式类似于Linux命令,但它实际上是一个bash shell内置,允许您更改有关该shell行为的许多事情。

例如,有一个选项允许shell在您键入目录名称时纠正轻微的拼写错误。为了演示,首先cd如下所示的命令,目录名bin,输入一个额外的字母,shell会报错并放弃:

bash: cd: binn:没有这样的文件或目录

下一个命令启用cdspell选项,让bash尝试纠正目录名称中的小错误。

$ shopt -s cdspell

一次cdspell如果某个目录名称拼写错误,bash将显示正确的拼写,然后运行正确的cd命令。如下图所示,松材线虫病确认了cd命令确实运行了。

$ cd binn bin $ pwd /home/sh /bin

如果你想知道它的名字,试着抑制住把它叫做“店茶”的冲动。相反,如果你思考,记忆就会更容易。”上海l形的选择“ion”,发音和“shopped”一样。这无疑是作者的想法。

的基本语法shopt是:

[-pqsu] [-o] [optname…]

这个语法摘要表明,所有参数都是可选的,并且一个命令可以操作多个“optname”(显示、启用或禁用的设置)。在阅读的时候要记住shopt“optname”列表和-pqsu参数通常被称为“选项”——命令选项和shell选项。

另一个非常有用的bash设置是histappend它允许多个shell写入相同的历史文件。只要记住bash只在会话结束时将来自会话的命令添加到其历史文件中。

测试一个设置并决定喜欢它之后,将所需的命令添加到.bashrc文件中,以便在每次登录时都启用该设置。你可能只需要删除一些评论标记:

#附加到历史文件,不要覆盖它#shopt -s histappend< = =

查看可用的设置的完整列表shopt只要键入“shopt”即可。在下面的命令中,输出被传递给命令简化本文的输出。

美元shopt |列autocd脱离assoc_expand_once globstar脱离cdable_vars gnu_errfmt脱离cdspell histappend histreedit关闭checkhash脱离checkjobs histverify脱离checkwinsize hostcomplete huponexit关闭cmdhist inherit_errexit关闭compat31了interactive_comments compat32关闭lastpipe脱离lithist compat40脱离localvar_inherit compat41脱离localvar_unset compat42脱离login_shell compat43 compat44关闭mailwarn complete_fullquote上no_empty_cmd_completion脱离nocaseglob direxpand脱离nocasematch dirspell dotglob nullglob从身上掉execfail progcomp在expand_aliases progcomp_alias关闭extdebug promptvars在extglob restricted_shell关闭extquote shift_verbose关闭failglob路径在xpg_echo掉globasciiranges force_fignore上

上面的列表包含53个设置。如果只想显示那些已启用的设置,请使用shopt - s命令:

$ shopt -s |列cdspell on force_fignore on checkwinsize on globasciiranges on cmdhist on interactive_comments on complete_fullquote on login_shell on expand_aliases on progcomp on extglob on promptvars on extquote on sourcepath on

要查看单个设置的状态,可以在设置名称后面输入“shopt”。例如:

$ shopt cdspell cdspell on

的选项shopt内置的包括:

  • -s启用(设置)设置
  • -u禁用(取消设置)设置
  • q抑制正常输出
  • -o限制的值optname的定义- o选项设置

q选项可能有点难以理解,直到您尝试它。在下面的第二个示例中,我们在尝试确定是否cdspell设置已启用,但未看到任何确认,因为q抑制输出。但是,我们仍然可以通过显示返回代码来确定是否启用了该设置。如果该设置已被禁用,则echo $ ?命令会返回a1

$ shopt cdspell $ shopt -q cdspell $ echo $?0

的列表shopt设置(又名选项),并解释它们如何影响bash行为,看看bash手册页并向下滚动到这样开始的部分:

shopt选项的列表是:assoc_expand_once如果设置,shell在算术表达式求值期间抑制as‐社交数组下标的多重求值,同时执行可执行变量赋值的内建函数,以及执行执行数组解引用的内建函数。如果设置为自动命令,则执行一个命令名,即目录名,就像执行cd com‐mand命令的参数一样。此选项仅供交互式shell使用。如果设置了cdable_vars,则假设cd内置命令的一个非目录的参数是一个变量的名称,该变量的值是要更改的目录。如果设置此选项,cd命令中目录组件拼写的小错误将被纠正。检查的错误是字符调换、字符丢失和字符多了一个。如果发现一个更正,更正后的文件名被打印,com‐mand继续进行。此选项仅供交互式shell使用。

既然这篇文章提到了histappend设置,这里是手册页的解释:

如果设置了histappend,那么历史记录列表将被附加到文件中,而不是覆盖该文件时,该文件是由HISTFILE变量的值命名的。

shopt内置可能不会成为你最喜欢的Linux技巧之一,但它允许你调整的一些方式bash举止可以取悦你。

加入网络世界社区有个足球雷竞技app脸谱网LinkedIn对最重要的话题发表评论。
相关:

版权©2020Raybet2

工资调查:结果在