env export set declare区别

显示

1. env

    显示当前系统的环境变量 

G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTSIZE=1000
HOME=/root
HOSTNAME=www.nginx.com
JAVA_HOME=/usr/java/jdk1.8.0_20
LANG=en_US.UTF-8
LESSOPEN=|/usr/bin/lesspipe.sh %s
LOGNAME=root
……

2. export 将环境变量导出

declare -x G_BROKEN_FILENAMES="1"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="www.nginx.com"
declare -x JAVA_HOME="/usr/java/jdk1.8.0_20"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
……

declare -x 设置环境变量,导出后,可以直接使用。实际上内容与env完全一致。


3. set 显示shell变量、系统变量、用户自定义变量

_=
a=4
aspch=123             #用户自定义变量
BASH_ALIASES=()       # shell变量
BASH_ARGC=()
BASH_ARGV=()
BASH=/bin/bash
BASH_CMDS=()
BASH_LINENO=()
HOSTNAME=www.nginx.com #环境变量

4. declare 显示shell变量和当前用户变量

     与set显示一致。

设置

1. export

在shell中设置变量,只在该shell进程中可见,而在其它子进程中均不可见。

[root@www ~]# spch=2
[root@www ~]# echo $spch      #本进程可见
2
[root@www ~]# bash            #新开一个shell子进程
[root@www ~]# echo $spch

[root@www ~]# exit
exit
[root@www ~]# echo $spch
2
[root@www ~]# 
若在子进程中仍然可见,需要通过export将其设置为环境变量。

[root@www ~]# spch=2
[root@www ~]# export spch
[root@www ~]# bash
[root@www ~]# echo $spch
2
[root@www ~]# 
当然,也可以将其组合成一句。即export spch=2.

2. set

set [+-abCdefhHklmnpPtuvx] 用来定制shell环境。

 -a  标示已修改的变量,以供输出至环境变量。
 -b  使被中止的后台程序立刻回报执行状态。
 -C  转向所产生的文件无法覆盖已存在的文件。
 -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
 -e  若指令传回值不等于0,则立即退出shell。  
 -f   取消使用通配符。
 -h  自动记录函数的所在位置。
 -H Shell  可利用"!"加<指令编号>的方式来执行history中记录的指令。
 -k  指令所给的参数都会被视为此指令的环境变量。
 -l  记录for循环的变量名称。
 -m  使用监视模式。
 -n  只读取指令,而不实际执行。
 -p  启动优先顺序模式。
 -P  启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
 -t  执行完随后的指令,即退出shell。
 -u  当执行时使用到未定义过的变量,则显示错误信息。
 -v  显示shell所读取的输入值。
 -x  执行指令后,会先显示该指令及所下的参数。
 +    <参数>  取消某个set曾启动的参数。
参考:https://www.centos.bz/2011/09/linux-set/

3. declare

 用于定义变量,比如declare -x spch=2, 直接将spch定义为环境变量;同时,

 declare -i a_int 设置a_int为整型。


4. env

 相当于拷贝一份shell变量,对某个值进行修改,以这个修改后的副本运行程序;然而原shell变量不受影响。

env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]  

例如:

#include <stdio.h>
     
extern char **environ;
int main(int argc, char *argv[])
{    
    char **env = environ;
     
    while (*env)
    {
        printf("%s\n", *env);
        env++;
    }          
    return 0;
} 
运行
[root@www ~]# env - PATH=1233 ./a.out 
PATH=1233
只有一个环境变量,值为PATH=123。若仅仅是修改PATH,其余保留,则需要:

[root@www ~]# env PATH=1233 ./a.out 

杂记

export 即使转换成环境变量,下次登录的时候,依然会消失,所以,需要写入文件中.

在/etc/profile中,export 变量=值。 这样,下次ssh后,系统会执行profile中内容。


s@s-virtual-machine:~$ cat << EOF > ~/.env_config > export COLORTERM="truecolor" export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=9a8360f17b64c98b11051c9668722b77" export GENICAM_GENTL64_PATH="/opt/spinnaker/lib/spinnaker-gentl" export > > EOF s@s-virtual-machine:~$ echo "source ~/.env_config" >> ~/.bashrc s@s-virtual-machine:~$ source ~/.bashrc declare -x COLORTERM="truecolor" declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=9a8360f17b64c98b11051c9668722b77" declare -x DBUS_STARTER_ADDRESS="unix:path=/run/user/1000/bus,guid=9a8360f17b64c98b11051c9668722b77" declare -x DBUS_STARTER_BUS_TYPE="session" declare -x DESKTOP_SESSION="ubuntu" declare -x DISPLAY=":0" declare -x GDMSESSION="ubuntu" declare -x GENICAM_GENTL64_PATH="/opt/spinnaker/lib/spinnaker-gentl" declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated" declare -x GNOME_SETUP_DISPLAY=":1" declare -x GNOME_SHELL_SESSION_MODE="ubuntu" declare -x GNOME_TERMINAL_SCREEN="/org/gnome/Terminal/screen/96fde94e_a59d_4362_af3d_c8d899299777" declare -x GNOME_TERMINAL_SERVICE=":1.108" declare -x GTK_MODULES="gail:atk-bridge" declare -x HOME="/home/s" declare -x IM_CONFIG_PHASE="1" declare -x LANG="en_US.UTF-8" declare -x LESSCLOSE="/usr/bin/lesspipe %s %s" declare -x LESSOPEN="| /usr/bin/lesspipe %s" declare -x LOGNAME="s" 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=00: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:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim不行啊
最新发布
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值