八种鲜为人知的Bash选项

一些Bash选项是众所周知的,并且经常使用。 例如,许多脚本的开头

 设置-o xtrace 

用于调试,

 设置-o errexit 

误退出或

 设置-o errunset 

如果未设置被调用变量,则退出。

但是还有许多其他选择。 有时,它们在芒格中描述得太混乱了,因此我在这里收集了一些最有用的信息,并作了解释。

注意:Mac可能具有较旧的bash版本(3.x,而不是4.x),其中不是所有这些选项都可用。 在这种情况下,请查看此处此处

set还是shopt


有两种设置bash参数的方法:从脚本或从命令行。 您可以使用内置的setshopt 。 两者都改变​​了外壳的行为,做了很多相同的事情(使用不同的参数),并且它们的起源也不同。 set参数是从其他Shell的参数继承或借用的,而shopt参数shopt在bash shopt创建的。

如果要查看当前选项,请运行:

 $ set -o $ shopt 

要激活set的选项,使用长或短语法:

 $ set -o errunset $ set -e 

效果是一样的。

要禁用该选项,您需要加上一个加号而不是一个减号:

 $ set +e 

很长一段时间我都不记得这种语法,因为逻辑似乎是错误的(减号打开了选项,加号关闭了)。

shopt使用(更具逻辑性) -s (设置)和-u (未设置)标志来启用和禁用选项:

 $ shopt -s cdspell # <= on $ shopt -u cdspell # <= off 

目录更改


有几个选项可帮助您使用目录。

1. cdspell


使用此设置,bash将开始理解拼写错误,并将您转移到您输入错误名称的文件夹。

 $ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd .. 

我使用此选项已经很多年了,很少(也许一年一次)做出一个非常奇怪的决定。 但是在其他日子里, cdspell可以节省时间。

2. autocd


如果您还没有准备好忍受重复的cd输入的低效率,那么可以设置该选项以在X命令不存在的情况下移至X文件夹。

 $ shopt -s autocd $ abcdefg $ cd .. 

结合自动完成功能,您可以快速跳转到以下文件夹:

 $ ./abc[TAB][RETURN] cd -- ./abcdefg 

只是不要rm -rf *文件夹rm -rf * (是的,这是可能的)。

3. direxpand


这是一个很酷的选项,可以通过按Tab来扩展环境变量:

 $ shopt -s direxpand $ ./[TAB] #  ... $ /full/path/to/current_working_folder $ ~/[TAB] #  ... $ /full/path/to/home/folder $ $HOME/[TAB] #  ... $ /full/path/to/home/folder 

清洁出口


4.检查工作


如果作业仍在后台运行,则此选项将停止从会话中退出。

显示未完成任务的列表,而不是退出。 如果仍要退出,请再次输入exit

 $ shopt -s checkjobs $ echo $$ 68125 # <= ID    $ sleep 999 & $ exit There are running jobs. [1]+ Running sleep 999 & $ echo $$ 68125 # <= ID      $ exit There are running jobs. [1]+ Running sleep 999 & $ exit $ echo $$ $ 59316 # <=    ID   

替代能力


5.全球星


此选项为您提供超常替代能力! 如果输入:

 $ shopt -s globstar $ ls ** 

然后Shell将递归显示所有目录和子目录。

direxpand结合使用direxpand您可以快速查看层次结构下面的所有内容:

 $ shopt -s direxpand $ ls **[TAB][TAB] Display all 2033 possibilities? (y or n) 

6.extglob


此选项激活更常与正则表达式关联的函数。 有时这非常有用:

 $ shopt -s extglob $ touch afile bfile cfile $ ls afile bfile cfile $ ls ?(a*|b*) afile bfile $ ls !(a*|b*) cfile 

在此,将图案放在括号中,并用竖线分隔。 以下是可用的运算符:

  ?  =匹配给定模式的零或一次出现
 !  =显示与给定模式不匹配的所有内容
 * =零次或多次
 + =一次或多次
 @ =恰好发生一次 

事故保护


7.组织验证


首先,使用缩写历史中的快速启动命令可能会有点吓人!!!$

histverify选项使histverify可以在启动之前先了解Bash如何解释该命令:

 $ shopt -s histverify $ echo !$ # <=   Enter    $ echo histverify # <=     , histverify # <=    

8.夜猫子


同样,为了防止发生意外,即避免使用重定向运算符( > )覆盖已存在的文件。 如果没有备份,这可能是灾难。

set -选项禁止此类覆盖。 如有必要,可以使用运算符>|绕过保护>|

 $ touch afile $ set -C $ echo something > afile -bash: afile: cannot overwrite existing file $ echo something >| afile $ 

Source: https://habr.com/ru/post/zh-CN452522/


All Articles