zoukankan      html  css  js  c++  java
  • UNIX下的环境变量--转载

     所有环境变量名都是大写
    小写,系统会当作shell script自定义变量,而不会当作环境变量

    [root@mac-home macg]# echo $path
                                                                            
    [root@mac-home macg]# echo $PATH
    /usr/kerberos/sbin:/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/macg/bin



        export不跟参数——显示所有环境变量
    # export
    declare -x G_BROKEN_FILENAMES="1"
    declare -x HISTSIZE="1000"
    declare -x HOME="/root"
    declare -x HOSTNAME="mac-home"
    declare -x LANG="en_US.UTF-8"
    declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
    declare -x LOGIN="macg"
    declare -x LOGNAME="macg"
    declare -x declare -x MAIL="/var/spool/mail/macg"
    declare -x OLDPWD="/etc/init.d"
    declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/macg/bin"
    declare -x PWD="/home/macg"
    declare -x SHELL="/bin/bash"
    declare -x SHLVL="2"
    declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
    declare -x TERM="vt100"
    declare -x USER="macg"

        显示全部环境变量,也可以用set
    $ set
    BASH=/bin/bash
    COLORS=/etc/DIR_COLORS
    COLUMNS=132
    HOME=/home/mac
    HOSTNAME=machome
    HOSTTYPE=i386
    IFS=$' '
    INPUTRC=/etc/inputrc
    LANG=en_US.UTF-8
    LESSOPEN='|/usr/bin/lesspipe.sh %s'
    LINES=49
    LOGNAME=mac
    PS4='+ '
    PWD=/home/mac
    REMOTEHOST=192.168.1.100
    SHELL=/bin/bash
    SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
    SHLVL=1
    SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
    SUPPORTED=en_US.UTF-8:en_US:en
    TERM=vt100              
    UID=500
    USER=mac                            
    _=expect


        显示单个环境变量用echo …  
    [root@mac-home macg]# echo $PATH      当前环境PATH(优先搜索,缺省搜索)
    /usr/kerberos/sbin:/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/macg/bin    由一系列冒号分隔的路径组成
    [root@mac-home macg]# echo $HOME      当前用户主目录
    /root  
    [root@mac-home macg]# echo $USER      当前用户名
    macg    
    [root@mac-home macg]# echo $PWD       当前目录
    /home/macg   
    [root@mac-home macg]# echo $SHELL     当前用户shell
    /bin/bash   
    [mac@machome ~]$ echo $TERM           当前终端形式,Linux 终端大多数用'vt100'或'linux'作为vt100                            终端类型。
    千万别用export …那是重置变量


        环境变量操作

    •     现有系统环境变量修改

        赋值
        export

    •     新建环境变量

        必须到/etc/profile里定义和export
        赋值
        export


        最简单的PATH环境变量的修改
    [mac@test1 ~]# echo $PATH
    /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/mac/bin
    [mac@test1 ~]# PATH=$PATH:/sbin
    [mac@test1 ~]# echo $PATH
    /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/mac/bin:/sbin
    [mac@test1 ~]# export PATH


        设置一个变量,直接用名称,而不需要加'$':
    PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin         


        export 环境变量,不能带$

    [mac@test1 ~]$ export $PATH
    -bash: export: `/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/mac/bin:/sbin':not a valid identifier
    [mac@test1 ~]$ export PATH




        export命令

    PATH=$PATH:/some/directory
    export PATH   
    export PATH=$PATH:/some/directory    同时修改和export变量
    export TERM PATH SHELL HOME    一次将4大环境变量放入环境中



        由于export变量的父子传递特性,如果想一直保持一个在unix环境变量,必须到/etc/profile 或/etc/bashrc 或~/.bashrc ~/.profile
    再其他地方定义和export都不会成功


       Source 命令——修改/etc/profile立刻生效
    vi /etc/profile   
    source /etc/profile    这样,刚刚写进去的环境变量就生效了
    其实退出shell再登进去,应该/etc/profile就生效



       环境变量改变以后,退出后重新su入,环境没改变,为什么?

    修改/etc/profile,加下面环境变量:
    JAVA_HOME="/usr/java"
    export JAVA_HOME

    重新退出,重新登入,
    [mac@demo1 ~]$ su
    Password:
    [root@demo1 mac]# export
    declare -x HOSTNAME="demo1.ntrackertest.com"
    declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/
    X11R6/bin:/home/mac/bin"
    没找到新加的变量JAVA_HOME
     解决问题:比如用su - ,才能调入新的环境变量

    [mac@demo1 ~]$ su -
    Password:
    [root@demo1 ~]# export
    declare -x HOSTNAME="demo1.ntrackertest.com"
    declare -x JAVA_HOME="/usr/java"
    PATH="/usr/java/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:
    /bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:."



    为什么root执行好多命令都说command not found
    你一定是telnet上来,然后su成root的吧,改改你的su命令格式,应该是su -


       不能用PATH=/some/directory,因为这将删除 $PATH 中其他的所有目录,必须作添加,PATH=$PATH:/some/directory


       请不要在'.bashrc'中设置 PATH ,否则会导致 PATH 中目录的意外增长。因为每次打开一个新的 shell新的终端 ,'.bashrc'都会作用。


       env VAR=value commmand           只想在执行某条指令时临时改变系统shell变量,又不想真正改变系统设置

     # /usr/local/mrtg-2/bin/mrtg /home/macg/www/mrtg/cfg/mrtg.cfg
    -----------------------------------------------------------------------
    ERROR: Mrtg will most likely not work properly when the environment
           variable LANG is set to UTF-8. Please run mrtg in an environment
           where this is not the case. Try the following command to start:

           env LANG=C /usr/local/mrtg-2/bin/mrtg /home/macg/www/mrtg/cfg/mrtg.cfg
    -----------------------------------------------------------------------
     # env LANG=C /usr/local/mrtg-2/bin/mrtg /home/macg/www/mrtg/cfg/mrtg.cfg
    2007-02-15 18:47:44, Rateup WARNING:

           更改提示符 的经验

     

    首先系统提示符是系统变量$PS1

     

    改变unix提示符: 为当前目录pwd

    # PS1='pwd'

    pwd     

    shell变量赋值,不需要带$

    提示符错误,成了字符串了

    pwdPS1='pwd#'

    pwd#   

    仍是字符串,因为’ ‘不能扩展

    只不过多了#

    pwd#PS1="$(pwd)#"

    /home#       

     

    /home#cd /etc

    /home#       

    必须在双引号下,命令才能扩展        

    $()里面命令的输出

     

    pwd命令只执行一次不随着当前目录改变而更改

    #PS1=$PWD

    /export/home/macg

     

    必须用系统变量$PWD

    才能使提示符随着目录changed 而更改

    /export/home/macg ls –l

     

    /export/home/macgPS1="$PWD >"

    /export/home/macg >

    发现还缺一个提示符

     

    必须加一个>


        Redhat下改提示符为"[\u@\h]:$PWD>$"
    $PS1="[\u@\h]:$PWD>$"
    [macg@machome]:/export/home/macg>$  

    原文地址:http://blog.sina.com.cn/s/blog_6151984a0100ej4v.html

  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4272583.html
Copyright © 2011-2022 走看看