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:未绑定的变量
许多额外的集选项是可用的,但这些是最有用的。