环境变量操作命令

更新时间:
2024-03-14
下载文档

环境变量操作命令

  1. 系统启动后会在内核中生成一份默认的环境变量,环境变量名和默认值由源程序决定。
  2. 系统启动后如果文件系统中存在有效的 /etc/profile 文件,则还会自动读取文件中的内容,并导入到 Shell 环境中,覆盖对应变量或增加新的变量。
  3. 程序运行时,以系统内的环境变量表为准而不是以 /etc/profile 文件为准,所以直接修改 /etc/profile 文件后需要通过 varload 命令重新加载才能生效。
  4. vars 命令用于查看系统内当前环境变量表。
  5. varload 命令用于加载某文件来配置系统环境变量,不指定文件参数则默认使用 /etc/profile 文件。
  6. varsave 命令用于将系统环境变量保存到指定文件,不指定文件参数则默认保存到 /etc/profile 文件中。对于 SYSTEMVERSIONLICENSETMPDIRKERN_FLOAT 这 5 个环境变量,它们是由内核自动生成的, varsave 命令保存时会自动跳过。
[root@sylixos:/root]# varload
environment variables load from /etc/profile fail, error: No such file or directory
[root@sylixos:/root]# varload /etc/profile_back
environment variables load from /etc/profile_back success.
[root@sylixos:/root]# varsave
environment variables save to /etc/profile success.
[root@sylixos:/root]#
[root@sylixos:/root]# cat /etc/profile
#sylixos environment variables profile.
DISPLAY="/dev/fb0"
XINPUT_PRIO="199"
QTDIR="/qt"
QPEDIR="/qt"
QWS_DISPLAY="sylixosfb:/dev/fb0"
QWS_MOUSE_PROTO="sylixosinput"
QWS_KEYBOARD="sylixosinput"
POINTERCAL_FILE="/etc/pointercal"
QT_PLUGIN_PATH="/qt/plugins"
QT_QWS_FONTDIR="/qt/lib/fonts"
QML_IMPORT_PATH="/qt/qml"
QML2_IMPORT_PATH="/qt/qml"
QT_QPA_PLATFORM_PLUGIN_PATH="/qt/plugins"
QT_QPA_PLATFORM="sylixosfb"
QT_QPA_FONTDIR="/qt/lib/fonts"
tetst="SylixOS kernel version: 2.1.6 Code name: Enterprise"
TERM_PS_COLOR=""
TERMCAP="/etc/termcap"
TERM="vt100"
LUA_CPATH="?.so;/usr/local/lib/lua/?.so;/usr/lib/lua/?.so;/lib/lua/?.so"
LUA_PATH="?.lua;/usr/local/lib/lua/?.lua;/usr/lib/lua/?.lua;/lib/lua/?.lua"
VPROC_MODULE_SHOW="0"
VPROC_EXIT_FORCE="0"
LOGINBL_REP="3"
LOGINBL_TO="120"
DEBUG_CRASHTRAP="0"
DEBUG_CPU="-1"
PATH_LOCALE="/usr/share/locale"
LC_ALL=""
LANG="C"
LD_LIBRARY_PATH="/qt/lib:/usr/lib:/lib:/usr/local/lib"
PATH="/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin"
NFS_CLIENT_PROTO="udp"
NFS_CLIENT_AUTH="AUTH_UNIX"
SYSLOGD_HOST="0.0.0.0:514"
SO_MEM_DIRECT="0"
SO_MEM_PAGES="8192"
TSLIB_CALIBFILE="/etc/pointercal"
TSLIB_TSDEVICE="/dev/input/touch0"
MOUSE="/dev/input/touch0:/dev/input/mse0"
KEYBOARD="/dev/input/kbd0"
STARTUP_WAIT_SEC="1"
TZ="CST-8:00:00"
[root@sylixos:/root]#
  1. vardel 命令用于删除一个系统环境变量。

  2. 在 Shell 环境中可以直接引用环境变量的值,引用格式为 ${VAR_NAME} ,大括号可省略。遇到此参数时 Shell 会自动使用环境变量的内容来替代 ${VAR_NAME} 。例如:执行 echo ${PATH} 命令,系统将会回显 PATH 环境变量的内容。

  3. Shell 环境中无需特定命令,可以直接添加或修改某环境变量,格式为: VAR_NAME=VAR_VALUE 。等号前后不能有空格,否则会被认为是某条命令加参数,而不是环境变量操作。 等号右边变量值可以为空,用于创建空值的环境变量或将某环境变量的值置为空,如果要删除某变量需要用 vardel 命令。变量值间不能有空格,否则会被分割为多个字符串且只有第一个字符串有效,如果需要输入的内容确实要有空格则要用双引号全部括起来。

  4. 修改一个环境变量,系统当前环境变量会立即变化,但不一定会立即起效,是否立即起效由具体使用环境变量的程序来决定,如TZ环境变量修改后,必须调用 tzsync 命令才会起效,而PATH变量则会立即起效,因为每次查找执行程序都会重新读取PATH变量值。

  5. 修改一个环境变量,系统当前环境变量会立即变化,但这是临时的,复位后无效。需要环境变量一直有效可以在修改后调用 varsave 命令来保存修改,或者直接编辑 /etc/profile 文件,下次重启起效。

  6. 环境变量名和值有一定命名规范。环境变量名必须由大小写字母、数字或下换线组成,约定俗成是字母全大写。 变量值可以是任意可打印字符,或转移字符 \r\n 。变量值可以用双引号括起来,也可以不括。所有双引号括都会被忽略,如果变量值需要有双引号则需用转移字符 \" 表示。

    [root@sylixos:/root]# echo ${PATH}
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
    [root@sylixos:/root]# echo $PATH
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
    [root@sylixos:/root]# TEST_PATH=
    [root@sylixos:/root]# echo $TEST_PATH
    sh: variable error.
    [root@sylixos:/root]# vars
    variable show >>
    
           VARIABLE      REF                       VALUE
    -------------------- --- --------------------------------------------------
    TEST_PATH
    NT_PROTO                 udp
    。。。
    [root@sylixos:/root]# vardel TEST_PATH
    [root@sylixos:/root]# echo $TEST_PATH
    sh: variable error.
    [root@sylixos:/root]# vars
    variable show >>
    
           VARIABLE      REF                       VALUE
    -------------------- --- --------------------------------------------------
    NT_PROTO                 udp
    DISPLAY                  /dev/fb0
    
    [root@sylixos:/root]#
    [root@sylixos:/root]# TEST_PATH=$PATH
    [root@sylixos:/root]# echo $TEST_PATH
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
    [root@sylixos:/root]# TEST_PATH=.
    [root@sylixos:/root]# echo $TEST_PATH
    .
    [root@sylixos:/root]# TEST_PATH=123 456
    [root@sylixos:/root]# echo $TEST_PATH
    123
    [root@sylixos:/root]# TEST_PATH="123 456"
    [root@sylixos:/root]# echo $TEST_PATH
    123 456
    [root@sylixos:/root]#
    [root@sylixos:/root]# TEST_PATH="""123 456"""
    [root@sylixos:/root]# echo $TEST_PATH
    123 456
    [root@sylixos:/root]# TEST_PATH=""\"123 456\"""
    [root@sylixos:/root]# echo $TEST_PATH
    123
    [root@sylixos:/root]# TEST_PATH=""\"123\"""
    [root@sylixos:/root]# echo $TEST_PATH
    123
    [root@sylixos:/root]# TEST_PATH=123\n456
    [root@sylixos:/root]# echo $TEST_PATH
    123
    456
    [root@sylixos:/root]# TEST_PATH=123\\456
    [root@sylixos:/root]# echo $TEST_PATH
    123456
    [root@sylixos:/root]#
    
    [root@sylixos:/root]# args $PATH
    arg   1 is args
    arg   2 is /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
    [root@sylixos:/root]# args ${PATH}
    arg   1 is args
    arg   2 is /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
    [root@sylixos:/root]#
    
  7. 双引号括起来的内容不进行环境变量替换。

    [root@sylixos:/root]# echo $PATH
    /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin 
    [root@sylixos:/root]# echo "$PATH"
    $PATH 
    [root@sylixos:/root]# 
    
  8. Shell 下只能解析一层环境变量,不能递归解析多层环境变量。

    [root@sylixos:/root]# VAR1=test
    [root@sylixos:/root]# VAR2="${VAR1}"
    [root@sylixos:/root]# vars
    variable show >>
    
           VARIABLE      REF                       VALUE
    -------------------- --- --------------------------------------------------
    VAR2                     ${VAR1}                                           
    VAR1                     test                                              
    TERM_PS_COLOR                                                              
    TERMCAP                  /etc/termcap                                      
    TERM                     vt100                                             
    LUA_CPATH                ?.so;/usr/local/lib/lua/?.so;/usr/lib/lua/?.so;/lib/lua/?.so
    LUA_PATH                 ?.lua;/usr/local/lib/lua/?.lua;/usr/lib/lua/?.lua;/lib/lua/?.lua
    VPROC_MODULE_SHOW        0                                                 
    VPROC_EXIT_FORCE         0                                                 
    LOGINBL_REP              3                                                 
    LOGINBL_TO               120                                               
    DEBUG_CRASHTRAP          0                                                 
    DEBUG_CPU                -1                                                
    PATH_LOCALE              /usr/share/locale                                 
    LC_ALL                                                                     
    LANG                     C                                                 
    LD_LIBRARY_PATH          /usr/lib:/lib:/usr/local/lib                      
    PATH                     /usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin  
    NFS_CLIENT_PROTO         udp                                               
    NFS_CLIENT_AUTH          AUTH_UNIX                                         
    SYSLOGD_HOST             0.0.0.0:514                                       
    KERN_FLOAT               1                                                 
    SO_MEM_DIRECT            0                                                 
    SO_MEM_PAGES             8192                                              
    TSLIB_CALIBFILE          /etc/pointercal                                   
    TSLIB_TSDEVICE           /dev/input/touch0                                 
    MOUSE                    /dev/input/mouse0:/dev/input/touch0               
    KEYBOARD                 /dev/input/keyboard0                              
    STARTUP_WAIT_SEC         1                                                 
    TZ                       CST-8:00:00                                       
    TMPDIR                   /tmp/                                             
    LICENSE                  SylixOS license: Commercial & GPL.                
    VERSION                  2.1.6                                             
    SYSTEM                   SylixOS kernel version: 2.1.6 Code name: Enterprise
    
    [root@sylixos:/root]# echo VAR1
    VAR1 
    [root@sylixos:/root]# echo $VAR1
    test 
    [root@sylixos:/root]# echo $VAR2
    ${VAR1} 
    [root@sylixos:/root]# 
    
  9. 当启动一个应用程序时,此份环境变量会导入到应用程序进程中,同时创建几个标示应用程序参数的环境变量,如 HOME 等。

  10. 内核同时提供 env 应用程序,用于环境变量操作。 env 应用程序不带参数时用于打印系统环境变量,只是输出格式和 vars 命令不同。也可以带参数用于修改或增加环境变量,格式为 env VAR_NAME=VAR_VALUE ,参数格式和单独进行环境变量设置一样,但效果略有不同,而且可以同时设置多组。设置时会显示设置前环境变量,需要再次查看才能看到新设置的效果。

[root@sylixos:/root]# env
TERM_PS_COLOR=
TERMCAP=/etc/termcap
TERM=vt100
LUA_CPATH=?.so;/usr/local/lib/lua/?.so;/usr/lib/lua/?.so;/lib/lua/?.so
LUA_PATH=?.lua;/usr/local/lib/lua/?.lua;/usr/lib/lua/?.lua;/lib/lua/?.lua
VPROC_MODULE_SHOW=0
VPROC_EXIT_FORCE=0
LOGINBL_REP=3
LOGINBL_TO=120
DEBUG_CRASHTRAP=0
DEBUG_CPU=-1
PATH_LOCALE=/usr/share/locale
LC_ALL=
LANG=C
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib
PATH=/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
NFS_CLIENT_PROTO=udp
NFS_CLIENT_AUTH=AUTH_UNIX
SYSLOGD_HOST=0.0.0.0:514
KERN_FLOAT=1
SO_MEM_DIRECT=0
SO_MEM_PAGES=8192
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_TSDEVICE=/dev/input/touch0
MOUSE=/dev/input/mouse0:/dev/input/touch0
KEYBOARD=/dev/input/keyboard0
STARTUP_WAIT_SEC=1
TZ=CST-8:00:00
TMPDIR=/tmp/
LICENSE=SylixOS license: Commercial & GPL.
VERSION=2.1.6
SYSTEM=SylixOS kernel version: 2.1.6 Code name: Enterprise
USER=root
HOME=/root
[root@sylixos:/root]#
[root@sylixos:/root]#  env VAR_TEST1=123 VAR_TEST2=456
TERM_PS_COLOR=
TERMCAP=/etc/termcap
TERM=vt100
LUA_CPATH=?.so;/usr/local/lib/lua/?.so;/usr/lib/lua/?.so;/lib/lua/?.so
LUA_PATH=?.lua;/usr/local/lib/lua/?.lua;/usr/lib/lua/?.lua;/lib/lua/?.lua
VPROC_MODULE_SHOW=0
VPROC_EXIT_FORCE=0
LOGINBL_REP=3
LOGINBL_TO=120
DEBUG_CRASHTRAP=0
DEBUG_CPU=-1
PATH_LOCALE=/usr/share/locale
LC_ALL=
LANG=C
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib
PATH=/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
NFS_CLIENT_PROTO=udp
NFS_CLIENT_AUTH=AUTH_UNIX
SYSLOGD_HOST=0.0.0.0:514
KERN_FLOAT=1
SO_MEM_DIRECT=0
SO_MEM_PAGES=8192
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_TSDEVICE=/dev/input/touch0
MOUSE=/dev/input/mouse0:/dev/input/touch0
KEYBOARD=/dev/input/keyboard0
STARTUP_WAIT_SEC=1
TZ=CST-8:00:00
TMPDIR=/tmp/
LICENSE=SylixOS license: Commercial & GPL.
VERSION=2.1.6
SYSTEM=SylixOS kernel version: 2.1.6 Code name: Enterprise
USER=root
HOME=/root
[root@sylixos:/root]#  env
VAR_TEST2=456
VAR_TEST1=123
TERM_PS_COLOR=
TERMCAP=/etc/termcap
TERM=vt100
LUA_CPATH=?.so;/usr/local/lib/lua/?.so;/usr/lib/lua/?.so;/lib/lua/?.so
LUA_PATH=?.lua;/usr/local/lib/lua/?.lua;/usr/lib/lua/?.lua;/lib/lua/?.lua
VPROC_MODULE_SHOW=0
VPROC_EXIT_FORCE=0
LOGINBL_REP=3
LOGINBL_TO=120
DEBUG_CRASHTRAP=0
DEBUG_CPU=-1
PATH_LOCALE=/usr/share/locale
LC_ALL=
LANG=C
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib
PATH=/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin
NFS_CLIENT_PROTO=udp
NFS_CLIENT_AUTH=AUTH_UNIX
SYSLOGD_HOST=0.0.0.0:514
KERN_FLOAT=1
SO_MEM_DIRECT=0
SO_MEM_PAGES=8192
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_TSDEVICE=/dev/input/touch0
MOUSE=/dev/input/mouse0:/dev/input/touch0
KEYBOARD=/dev/input/keyboard0
STARTUP_WAIT_SEC=1
TZ=CST-8:00:00
TMPDIR=/tmp/
LICENSE=SylixOS license: Commercial & GPL.
VERSION=2.1.6
SYSTEM=SylixOS kernel version: 2.1.6 Code name: Enterprise
USER=root
HOME=/root
[root@sylixos:/root]#
  1. 其他情况,有一个系统提供的固定环境变量 ? ,用于获得当前线程最后一次系统错误号。
[root@sylixos:/root]# echo $?
0
[root@sylixos:/root]# echo ${?}
0
[root@sylixos:/root]# /apps/cmdtest/cmdtest
cmdtest app
tid = 4010019
[sh]Warning: Program is killed (SIGKILL) by shell.
    Restart SylixOS is recommended!
[root@sylixos:/root]# echo ${?}
1
[root@sylixos:/root]#
文档内容是否对您有所帮助?
有帮助
没帮助