使用Linux set命令

在通过雾中相互冲突的迹象,丢失的商人徘徊。
Gremlin / Getty Images

Linux.命令允许您更改shell选项的值或显示shell变量的名称和值。很少使用,它是bash内置的,但比大多数内置的要复杂一些。

如果使用不带任何参数的命令,您将获得所有设置的列表——所有shell变量和函数的名称和值。不过小心!最终,您将看到屏幕上流淌着大量的输出。在我的Fedora系统上只有不到3000行输出:

$ set | wc -l 2954

列表的顶部看起来像下面所看到的,但是随着您的移动,输出变得相当复杂。

$ |头-10年BASH = / bin / BASH BASHOPTS = cdspell: checkwinsize: cmdhist: complete_fullquote: expand_aliases: extglob: extquote: force_fignore: globasciiranges: histappend: interactive_comments: progcomp: promptvars:路径BASH_ALIASES = () BASH_ARGC = ([0] = " 0 ") BASH_ARGV = () BASH_CMDS = () BASH_COMPLETION_VERSINFO =([0] =“2”[1]=“十一”)BASH_LINENO = () BASH_SOURCE = ()BASH_VERSINFO =([0] = " 5 "[1] =“1”[2]= " 0 "[3]=“1”[4]=[5]“释放”=“x86_64-redhat-linux-gnu”)

更实际上,你可以做一些非常有用的事情.让我们来看看其中的一些。

调试脚本

你可以使用设置- x命令来进行一些脚本调试。换句话说,当您使用这个选项时,bash将向您显示更多的输出,以显示您的脚本所达到的状态。本例中使用的脚本执行大量检查,然后打印所选文件的顶部行。

#!/bin/bash set -x if [$# -lt 2]; /bin/bash然后返回" Usage: $0 lines filename " exit 1 fi if [!- f 2美元);然后echo " Error: File $2 not found " exit 3 else echo top of File head -$1 $2 fi msg="bye" echo $msg

没有设置- x,脚本将显示如下输出:

$ script3 3 file top of #!/bin/bash -x date bye

设置- x,它显示正在运行的每个命令以及输出。

$ script3 3文件+ ' (' 2 lt 2  ‘]’ + [[ 3 ! = [0 - 9 ]* ]] + ‘[‘ ‘!' -f file '] ' + echo file top of file + head -3 file #!/bin/bash -x date + msg=bye + echo bye

还可以通过放置-X在“shebang行”(即脚本的顶部行)上像这样:

#!/bin/bash - x

使用的好处之一设置- x然后组+ x这是第一个吗开始调试和第二个关闭它,这样您就可以看到脚本的一小部分的详细输出,如果这就是您需要关注的全部内容的话。

Set -x if [!- f 2美元);然后echo " Error: File $2 not found " exit 3 else echo top of File head -$1 $2 fi set +x

其他选项可以以同样的方式打开,然后再关闭。

自动导出

使用设置-,您可以使您创建的任何变量或函数自动导出,以便子shell和脚本可以使用它们。这里有一个例子:

$ set -a $ 1 =1 $ 2 =2 $ 3 =3 $ 4 =4 $ /bin/bash <== start new shell $ echo $ 1 $ 2 $ 3 $ 4 1 2 3 4

如果命令失败,请立即退出

设置- e命令将导致脚本在遇到错误时退出。在这个例子中设置- e调用命令。

$ cat script1 #!/bin/bash set -e cat nosuchfile echo“So long!”

正如您可能怀疑的那样,“nosuchfile”文件不存在,因此脚本在此点上退出设置- e.最后一个回声命令永远不会有机会运行。

$ script1 cat: nosuchfile:没有这样的文件或目录

不要忽略不存在的变量

默认情况下,Bash将忽略任何不存在的变量。例如,在下面的脚本中,Bash将忽略这一事实var2美元还没有定义就简单显示了var1美元

$ cat script1 #!/bin/bash var1="123" echo $var1 $var2 $ ./script1 123

如果你加入设置- u它向脚本报告问题。

$ cat script2 #!/bin/bash set -u var1="123
$ ./script2 ./script1:行5:var2:未绑定的变量

许多额外的选项是可用的,但这些是最有用的。

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

版权©2021Raybet2

SD-WAN采购商指南:要询问供应商(和您自己)的关键问题