zoukankan      html  css  js  c++  java
  • Linux 下 set env export declare浅浅 set和shopt命令详解--(shell定制) (转载)

    set 用来显示本地变量
    env 用来显示环境变量
    export 用来显示和设置环境变量

    set 显示当前shell的变量,包括当前用户的变量
    env 显示当前用户的变量
    export 显示当前导出成用户变量的shell变量

    每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比 如HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变 量可以通过export “导出”变成一个用户变量

    env显示当前用户的环境变量情况,包括SHELL,PATH等
    export variable 将局部变量导出为全局变量,使变量在当前SHELL生效,可使用set命令查看所有已定义的变量,如果要取消某个变量,执行unset variable

    declare声明 shell 变量并设置变量的属性([rix]即为变量的属性),也可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
    3参数
       +/-  "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
     -f  仅显示函数。
     r  将变量设置为只读。
     x  指定的变量会成为环境变量,可供shell以外的程序来使用。
     i  [设置值]可以是数值,字符串或运算式。

    我们知道bash的内置命令(BASH BUILTIN COMMANDS),以下都是bash的内置命令
    bash, :, ., [, alias, bg, bind, break, builtin, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, jobs, kill, let, local, logout, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, wait - bash built-in commands

    set命令可以用来定制shell环境,使用选项“o”来打开或者关闭选项。例如打开选项:set -o 选项,关闭选项目:set +o 选项。

    内置set命令选项

    选项名 快捷开关 含义
    allexport -a 从这个选项中被设置开始就自动标明要输出的新变量或修改过的变量,直至选项被复位
    braceexpand -B 打开花括号扩展,它是一个默认设置
    emacs   使用emacs内置编辑器进行命令行编辑,是一个默认设置
    errexit -e 当命令返回一个非零退出状态(失败)时退出。读取初始化文件时不设置
    histexpand -H 执行历史替换时打开!和!!扩展,是一个默认设置
    history   打开命令行历史、默认为打开
    ignoreeof   禁止用EOF(Ctrl+D)键退出shell。必须键入exit才能退出。等价于设置shell变量IGNOREEOF=10
    keyword -k  将关键字参数放到命令的环境中
    interactive-comments   对于交互式shell,把#符后面的文本作为注释
    monitor -m 设置作业控制
    noclobber -C 防止文件在重定向时被重写
    noexec -n 读命令,但不执行。用来检查脚本的语法。交互式运行时不开启
    noglob -d 禁止用路径名扩展。即关闭通配符
    notify -b 后台作业完成时通知用户
    nounset -u  扩展一个未设置的变量时显示一个错误信息
    onecmd -t 在读取和执行命令后退出
    physical -P  设置时,在键入cd或pwd禁止符号链接。用物理目录代替
    privileged -p 设置后,shell不读取.profile或ENV文件,且不从环境继承shell函数,将自动为setuid脚本开启特权
    verbose -v 为调试打开verbose模式
    vi   使用vi内置编辑器进行命令行编辑
    xtrace -x 为调试打开echo模式
         

    例如要打开vi交互式命令行编辑,则如下:

    [root@localhost ~]# set -o #查看当前设置情况
    allexport off
    braceexpand on
    emacs on
    errexit off
    errtrace off
    functrace off
    hashall on
    histexpand on
    history on
    ignoreeof off
    interactive-comments on
    keyword off
    monitor on
    noclobber off
    noexec off
    noglob off
    nolog off
    notify off
    nounset off
    onecmd off
    physical off
    pipefail off
    posix off
    privileged off
    verbose off
    vioff#关闭中
    xtrace off

    ############################## 呵呵,原来就是这个意思#
    [root@localhost ~]# set -o vi #把vi选项打开,意思就是在shell命令行中,再按下ESC后,可以使用vi中的命令

    ########################################################
    [root@localhost ~]# set -o #查看当前设置情况
    allexport off
    braceexpand on
    emacs off
    errexit off
    errtrace off
    functrace off
    hashall on
    histexpand on
    history on
    ignoreeof off
    interactive-comments on
    keyword off
    monitor on
    noclobber off
    noexec off
    noglob off
    nolog off
    notify off
    nounset off
    onecmd off
    physical off
    pipefail off
    posix off
    privileged off
    verbose off
    vion#已经打开
    xtrace off

      

     

       shopt命令是set命令的一种替代,很多方面都和set命令一样,但它增加了很多选项。可有使用“-p”选项来查看shopt选项的设置。“-u”开关表示一个复位的选项,“-s”表示选项当前被设置。

    shopt命令选项

     

    选项 含义
    cdable_vars 如果给cd内置命令的参数不是一个目录,就假设它是一个变量名,变量的值是将要转换到的目录
    cdspell 纠正cd命令中目录名的较小拼写错误。检查的错误包括颠倒顺序的字符,遗漏的字符以及重复的字符。如果知道一处修改,正确的路径就打印出,命令将继续。只用于交互式shell
    checkhash bash在试图执行一个命令前,先在哈希表中寻找,以确定命令是否存在。如果命令不存在,就执行正常路径搜索
    checkwinsize bash在每个命令后检查窗口大小,如果有必要,就更新LINES和COLUMNS的值
    cmdhist bash试图将一个多行命令的所有行保存在同一个历史项中。这使得多行命令的重新编辑更方便
    dotglob bash在文件名扩展的结果中包括以点(.)开头的文件名
    execfail 如果一个交互式shell不能执行指定给exec内置命令作为参数的文件,它不会退出。如果exec失败,一个交互式shell不会退出
    expand_aliases 别名被扩展。默认为打开
    extglob 打开扩展的模式匹配特征(正常的表达式元字符来自Korn shell的文件名扩展)
    histappend 当shell退出时,历史清单将添加到以HISTFILE变量的值命名的文件中,而不是覆盖文件
    histreedit 如果readline正被使用,用户有机会重新编辑一个失败的历史替换
    histverify 如果设置,且readline正被使用,历史替换的结果不会立即传递给shell解析器。而是将结果行装入readline编辑缓冲区中,允许进一步修改
    hostcomplete 如果设置,且readine正被使用,当正在完成一个包含@的词时bash将试图执行主机名补全。默认为打开
    huponexit 如果设置,当一个交互式登陆shell退出时,bash将发送一个SIGHUP(挂起信号)给所有的作业
    interactive_comments 在一个交互式shell中,允许以#开头的词以及同一行中其他的字符被忽略。默认为打开
    lithist 如果打开,且cmdhist选项也打开,多行命令将用嵌入的换行符保存到历史中,而无需在可能的地方用分号来分隔
    mailwarn 如果设置,且bash用来检查邮件的文件自从上次检查后已经被访问,将显示消息“The mail in mailfile has been read”
    nocaseglob 如果设置,当执行文件名扩展时,bash在不区分大小写的方式下匹配文件名
    nullglob 如果设置,bash允许没有匹配任何文件的文件名模式扩展成一个空串,而不是它们本身
    promptvars 如果设置,提示串在被扩展后再经历变量和参量扩展。默认为打开
    restricted_shell 如果shell在受限模式下启动就设置这个选项。该值不能被改变。当执行启动文件时,不能复位该选项,允许启动文件发现shell是否是受限的
    sourcepath 如果设置,source内置命令使用PATH的值来寻找包含作为参数提供的文件的目录。默认为打开
    source 点(.)的同义词
    shift_verbose 如果该选项设置,当移动计数超过位置参量个数时,shift内置命令将打印一个错误消息

    自Bash 3.1版开始,引入新选项 nocasematch,可让Bash在对比样式时忽略大小写。

    shopt -s nocasematch #打开选项

     

    [root@localhost ~]# shopt -p #查看当前设置情况
    shopt -u cdable_vars
    shopt -u cdspell
    shopt -u checkhash
    shopt -s checkwinsize
    shopt -s cmdhist
    shopt -u dotglob
    shopt -u execfail
    shopt -s expand_aliases
    shopt -u extdebug
    shopt -u extglob
    shopt -s extquote
    shopt -u failglob
    shopt -s force_fignore
    shopt -u gnu_errfmt
    shopt -u histreedit
    shopt -u histappend
    shopt -u histverify
    shopt -s hostcomplete
    shopt -u huponexit
    shopt -s interactive_comments
    shopt -u lithist
    shopt -s login_shell
    shopt -u mailwarn
    shopt -u no_empty_cmd_completion
    shopt -u nocaseglob
    shopt -u nullglob
    shopt -s progcomp
    shopt -s promptvars
    shopt -u restricted_shell
    shopt -u shift_verbose
    shopt -s sourcepath
    shopt -u xpg_echo

    [root@localhost ~]# shopt -s cdspell #把cdspell选项打开
    [root@localhost ~]# shopt -p cdspell #打印cdspell设置
    shopt -s cdspell
    [root@localhost ~]# cd /raot #故意拼写错误
    /root
    [root@localhost ~]# pwd #查看当前目录
    /root
    [root@localhost ~]# cd /usr/loca/bin #故意拼写错误
    /usr/local/bin
    [root@localhost bin]# pwd #查看当前目录
    /usr/local/bin
    [root@localhost bin]# shopt -u cdspell #把cdspell选项打开
    [root@localhost bin]# shopt -p cdspell #打印cdspell设置
    shopt -u cdspell
    [root@localhost bin]# cd /raot #故意拼写错误
    -bash: cd: /raot: 没有那个文件或目录 #进入目录错误

     

    set选项与shopt选项是两组不同的内容,用set -o和shopt -p可以分别查看两个组所有的打开和关闭的条目, 在默认状态下,有些是打开的,有些是关闭的,shopt各选项随着bash版本的更新会有增加,与shopt相关的基本操作如下:
    # shopt -p 列出所有选项
    # shopt -s 列出所有打开的选项
    # shopt -s extglob 打开extglob选项
    # shopt -u 列出所有关闭的选项
    # shopt -u extglob 关闭extglob选项

    举列说明:
    cdspell 当cd进一个目录时,如果目录名被无意中打错,某个字母错了或者缺失,也一样可以进入这个目录。
    dotglob 以点开头的隐藏文件可以不用前面加点而像其它文件一样正常地用通配符表示。
    extglob 可以用rm !(*jpg)这样的方式来删除所有不以jpg结尾的文件名,也可以 rm *@(jpg|png) 这样地表示“或”,当然,还有其它.....
    在bash的使用过程中需要熟悉这些选项,找到符合自己口味的设置。

    http://blog.csdn.net/ydongsky/article/details/8272897

  • 相关阅读:
    SQL Server学习之路:建立数据库、建立表
    tomcat访问的重定向问题
    PAT A1107——并查集
    ^-^
    JSON.parse()和JSON.stringify()的用法
    Android——ViewHolder的作用与用法
    题解-Atcoder_agc005D ~K Perm Counting
    题解-bzoj2560 串珠子
    题解-Codeforces710F String Set Queries
    游记-NOIP2018
  • 原文地址:https://www.cnblogs.com/mycats/p/3933057.html
Copyright © 2011-2022 走看看