[linux] linux 环境变量
bash shell 用一个叫做环境变量的特性来存储有关shell会话和工作环境的信息。它允许你在内存中存储数据,以便运行在shell上的程序和脚本访问。这也是存储永久数据的一种简单方法。这些数据可以用来识别用户账户,系统,shell的特性以及任何其他你需要存储的数据。在bash shell 中环境变量分两类:
1.全局变量;2.局部变量。
全局变量不仅对shell会话可见,对所有shell创建的子线程也可见。局部变量只对创建他们的shell可见。系统变量一律使用大写字母区别与普通用户的环境变量。
(1)printev 查看全局变量
[wolf@localhost ~]$ printenv
ORBIT_SOCKETDIR=/tmp/orbit-wolf
HOSTNAME=localhost.localdomain
GIO_LAUNCHED_DESKTOP_FILE_PID=3072
IMSETTINGS_INTEGRATE_DESKTOP=yes
TERM=xterm
SHELL=/bin/bash
CATALINA_HOME=/opt/apache-tomcat-6.0.43
HISTSIZE=1000
XDG_SESSION_COOKIE=f9c2760f738c7539134f5da60000003c-1423519849.665913-225086586
GTK_RC_FILES=/etc/gtk/gtkrc:/home/wolf/.gtkrc-1.2-gnome2
WINDOWID=27262979
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
CATALINA_BASE=/opt/apache-tomcat-6.0.43
IMSETTINGS_MODULE=IBus
USER=wolf
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
GNOME_KEYRING_SOCKET=/tmp/keyring-3kCxYG/socket
SSH_AUTH_SOCK=/tmp/keyring-3kCxYG/socket.ssh
USERNAME=wolf
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2590,unix/unix:/tmp/.ICE-unix/2590
GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/gnome-terminal.desktop
PATH=/opt/java/jdk1.7.0_75/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wolf/bin
MAIL=/var/spool/mail/wolf
DESKTOP_SESSION=gnome
QT_IM_MODULE=ibus
PWD=/home/wolf
XMODIFIERS=@im=ibus
JAVA_HOME=/opt/java/jdk1.7.0_75
GDM_KEYBOARD_LAYOUT=us
GNOME_KEYRING_PID=2580
LANG=zh_CN.UTF-8
GDM_LANG=zh_CN.UTF-8
GDMSESSION=gnome
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
HOME=/home/wolf
SHLVL=2
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LOGNAME=wolf
QTLIB=/usr/lib/qt-3.3/lib
CVS_RSH=ssh
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zGletFuv7f,guid=061bd662ff67f388ab35839e00000065
CLASSPATH=.:/opt/java/jdk1.7.0_75/lib/dt.jar:/opt/java/jdk1.7.0_75/lib/tools.jar
LESSOPEN=||/usr/bin/lesspipe.sh %s
WINDOWPATH=1
DISPLAY=:0.0
G_BROKEN_FILENAMES=1
COLORTERM=gnome-terminal
XAUTHORITY=/var/run/gdm/auth-for-wolf-oDH45t/database
_=/usr/bin/printenv
(2) echo 查看单个环境变量的值,要添加$符号表示引用
[wolf@localhost ~]$ echo $HOME
/home/wolf
局部环境变量只能在定义它们的进程中可见。尽管他们是局部的,却和全局环境变量一样重要。事实上,linux系统也默认定义了标准局部环境变量。查看局部环境变量的列表有点复杂。遗憾的是,linux中并没有提供这样的命令来显示
局部环境变量。set命令会显示为某个特定进程设置的所有环境变量。当然,也包括全局环境变量。
[wolf@localhost ~]$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
CATALINA_BASE=/opt/apache-tomcat-6.0.43
CATALINA_HOME=/opt/apache-tomcat-6.0.43
CLASSPATH=.:/opt/java/jdk1.7.0_75/lib/dt.jar:/opt/java/jdk1.7.0_75/lib/tools.jar
COLORS=/etc/DIR_COLORS
COLORTERM=gnome-terminal
COLUMNS=73
CVS_RSH=ssh
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zGletFuv7f,guid=061bd662ff67f388ab35839e00000065
DESKTOP_SESSION=gnome
DIRSTACK=()
DISPLAY=:0.0
EUID=500
GDMSESSION=gnome
GDM_KEYBOARD_LAYOUT=us
GDM_LANG=zh_CN.UTF-8
GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/gnome-terminal.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID=3072
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_PID=2580
GNOME_KEYRING_SOCKET=/tmp/keyring-3kCxYG/socket
GROUPS=()
GTK_RC_FILES=/etc/gtk/gtkrc:/home/wolf/.gtkrc-1.2-gnome2
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/home/wolf/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/home/wolf
HOSTNAME=localhost.localdomain
HOSTTYPE=i386
ID=500
IFS=$' \t\n'
IMSETTINGS_INTEGRATE_DESKTOP=yes
IMSETTINGS_MODULE=IBus
JAVA_HOME=/opt/java/jdk1.7.0_75
LANG=zh_CN.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=24
LOGNAME=wolf
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:'
MACHTYPE=i386-redhat-linux-gnu
MAIL=/var/spool/mail/wolf
MAILCHECK=60
OPTERR=1
OPTIND=1
ORBIT_SOCKETDIR=/tmp/orbit-wolf
OSTYPE=linux-gnu
PATH=/opt/java/jdk1.7.0_75/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wolf/bin
PIPESTATUS=([0]="0")
PPID=3072
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/home/wolf
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
QTLIB=/usr/lib/qt-3.3/lib
QT_IM_MODULE=ibus
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2590,unix/unix:/tmp/.ICE-unix/2590
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=2
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SSH_AUTH_SOCK=/tmp/keyring-3kCxYG/socket.ssh
TERM=xterm
UID=500
USER=wolf
USERNAME=wolf
WINDOWID=27262979
WINDOWPATH=1
XAUTHORITY=/var/run/gdm/auth-for-wolf-oDH45t/database
XDG_SESSION_COOKIE=f9c2760f738c7539134f5da60000003c-1423519849.665913-225086586
XMODIFIERS=@im=ibus
_=clear
colors=/etc/DIR_COLORS
__udisks ()
{
local IFS='
';
local cur="${COMP_WORDS[COMP_CWORD]}";
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--show-info" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--inhibit-polling" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--mount" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--unmount" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--detach" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--ata-smart-refresh" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--ata-smart-simulate" ]; then
_filedir || return 0;
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--set-spindown" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
if [ "${COMP_WORDS[$(($COMP_CWORD - 1))]}" = "--poll-for-media" ]; then
COMPREPLY=($(compgen -W "$(udisks --enumerate-device-files)" -- $cur));
else
COMPREPLY=($(IFS=: compgen -W "--dump:--inhibit-polling:--inhibit-all-polling:--enumerate:--enumerate-device-files:--monitor:--monitor-detail:--show-info:--help:--mount:--mount-fstype:--mount-options:--unmount:--unmount-options:--detach:--detach-options:--ata-smart-refresh:--ata-smart-wakeup:--ata-smart-simulate:--set-spindown:--set-spindown-all:--spindown-timeout:--poll-for-media" -- $cur));
fi;
fi;
fi;
fi;
fi;
fi;
fi;
fi;
fi
}
可以看到printenv中的全局变量都出现在set中,但set也包含了一些其他的变量就是局部环境变量。
二, 设置环境变量
1.设置局部环境变量
通过等号‘=’赋值,通过$引用变量。引用字符串的时候要添加引号。
[wolf@localhost ~]$ test=linux
[wolf@localhost ~]$ echo $test
linux
[wolf@localhost ~]$ a=love linux
bash: linux: command not found
[wolf@localhost ~]$ a='love linux'
[wolf@localhost ~]$ echo $a
love linux
创建子shell后定义的局部变量就不能用了。当你推出子shell的时候,局部变量还在。
[wolf@localhost ~]$ bash
[wolf@localhost ~]$ echo $a
[wolf@localhost ~]$
[wolf@localhost ~]$ exit
exit
[wolf@localhost ~]$ echo $a
love linux
[wolf@localhost ~]$
2.设置全局环境变量
全局环境变量的创建方法是先创建一个局部变量然后导出到全局环境中。export将局部变量导出到全局环境中,用bash新开一个子shell,验证全局变量。
[wolf@localhost ~]$ test='linux develop'
[wolf@localhost ~]$ export test
[wolf@localhost ~]$ echo $test
linux develop
[wolf@localhost ~]$ bash
[wolf@localhost ~]$ echo $test
linux develop
[wolf@localhost ~]$
[wolf@localhost ~]$ test='linux develop'
[wolf@localhost ~]$ export test
[wolf@localhost ~]$ echo $test
linux develop
[wolf@localhost ~]$ bash
[wolf@localhost ~]$ echo $test
linux develop
[wolf@localhost ~]$ unset test
[wolf@localhost ~]$ echo $test
[wolf@localhost ~]$ test='linux well'
[wolf@localhost ~]$ echo $test
linux well
[wolf@localhost ~]$ bash
[wolf@localhost ~]$ echo $test
[wolf@localhost ~]$ export $test
declare -x CATALINA_BASE="/opt/apache-tomcat-6.0.43"
declare -x CATALINA_HOME="/opt/apache-tomcat-6.0.43"
declare -x CLASSPATH=".:/opt/java/jdk1.7.0_75/lib/dt.jar:/opt/java/jdk1.7.0_75/lib/tools.jar"
declare -x COLORTERM="gnome-terminal"
declare -x CVS_RSH="ssh"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-zGletFuv7f,guid=061bd662ff67f388ab35839e00000065"
declare -x DESKTOP_SESSION="gnome"
declare -x DISPLAY=":0.0"
declare -x GDMSESSION="gnome"
declare -x GDM_KEYBOARD_LAYOUT="us"
declare -x GDM_LANG="zh_CN.UTF-8"
declare -x GIO_LAUNCHED_DESKTOP_FILE="/usr/share/applications/gnome-terminal.desktop"
declare -x GIO_LAUNCHED_DESKTOP_FILE_PID="3072"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_KEYRING_PID="2580"
declare -x GNOME_KEYRING_SOCKET="/tmp/keyring-3kCxYG/socket"
declare -x GTK_RC_FILES="/etc/gtk/gtkrc:/home/wolf/.gtkrc-1.2-gnome2"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/wolf"
declare -x HOSTNAME="localhost.localdomain"
declare -x IMSETTINGS_INTEGRATE_DESKTOP="yes"
declare -x IMSETTINGS_MODULE="IBus"
declare -x JAVA_HOME="/opt/java/jdk1.7.0_75"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="wolf"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:"
declare -x MAIL="/var/spool/mail/wolf"
declare -x OLDPWD
declare -x ORBIT_SOCKETDIR="/tmp/orbit-wolf"
declare -x PATH="/opt/java/jdk1.7.0_75/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wolf/bin"
declare -x PWD="/home/wolf"
declare -x QTDIR="/usr/lib/qt-3.3"
declare -x QTINC="/usr/lib/qt-3.3/include"
declare -x QTLIB="/usr/lib/qt-3.3/lib"
declare -x QT_IM_MODULE="ibus"
declare -x SESSION_MANAGER="local/unix:@/tmp/.ICE-unix/2590,unix/unix:/tmp/.ICE-unix/2590"
declare -x SHELL="/bin/bash"
declare -x SHLVL="4"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/keyring-3kCxYG/socket.ssh"
declare -x TERM="xterm"
declare -x USER="wolf"
declare -x USERNAME="wolf"
declare -x WINDOWID="27262979"
declare -x WINDOWPATH="1"
declare -x XAUTHORITY="/var/run/gdm/auth-for-wolf-oDH45t/database"
declare -x XDG_SESSION_COOKIE="f9c2760f738c7539134f5da60000003c-1423519849.665913-225086586"
declare -x XMODIFIERS="@im=ibus"
[wolf@localhost ~]$ export test
[wolf@localhost ~]$ echo $test
[wolf@localhost ~]$ exit
exit
[wolf@localhost ~]$ echo $test
linux well
[wolf@localhost ~]$ export $test
[wolf@localhost ~]$ echo $test
linux well
[wolf@localhost ~]$ bash
[wolf@localhost ~]$ echo $test
[wolf@localhost ~]$ exit
exit
[wolf@localhost ~]$ export test
[wolf@localhost ~]$ echo $test
linux well
[wolf@localhost ~]$ bash
[wolf@localhost ~]$ echo $test
linux well
[wolf@localhost ~]$
以上程序,unset卸载全局变量,bash 开启一个子shell,exit退出子shell。export 把局部变量导出到全局环境中去。export 到处变量不能用$.

浙公网安备 33010602011771号