export 设置全局变量
export 命令就是声明下这个变量,这个变量只在这个 shell 的子 shell 中生效,反之在子 shell 中定义的变量,在父 shell 中不生效
在evan-01(1)下查看
查看当前在哪个终端下
[root@evan-01 ~]# w
15:16:54 up 11 min, 1 user, load average: 0.00, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.94.1 15:10 6.00s 0.08s 0.01s w
[root@evan-01 ~]#
查看在哪个 TTY 下
[root@evan-01 ~]# echo $SSH_TTY
/dev/pts/0
[root@evan-01 ~]#
定义变量并 echo
[root@evan-01 ~]# evan=linux
[root@evan-01 ~]# echo $evan
linux
[root@evan-01 ~]#
复制一个终端,在evan-01(2)下查看
[root@evan-01 ~]# echo $SSH_TTY
/dev/pts/1
[root@evan-01 ~]#
echo 在evan-01中定义的变量 evan
[root@evan-01 ~]# echo $evan
[root@evan-01 ~]#
pstree 查看系统进程(在evan-01 (1)下操作)
如果在当前 shell 中运行 bash 指令,则会进入一个新的 shell ,这个 shell 就是原来 shell 的子 shell 。可以用 pstree 命令查看下
[root@evan-01 ~]# bash
[root@evan-01 ~]# w
15:22:41 up 17 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.94.1 15:10 1.00s 0.07s 0.00s w
root pts/1 192.168.94.1 15:19 33.00s 0.00s 0.00s -bash
[root@evan-01 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─gssproxy───5*[{gssproxy}]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd─┬─bash───bash───pstree
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@evan-01 ~]#
在父 shell 中设定变量后,进入子 shell 后,该变量是不会生效的
实际上这个地方是没有的
[root@evan-01 ~]# echo $evan
[root@evan-01 ~]#
我们退出当前的 shell 再来看看
[root@evan-01 ~]# exit
exit
[root@evan-01 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─gssproxy───5*[{gssproxy}]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd─┬─bash───pstree
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@evan-01 ~]# echo $evan
linux
[root@evan-01 ~]#
在这个地方又有了,也就是说我们刚才定义的变量不是全局变量
变成全局环境变量
[root@evan-01 ~]# export evan=linux
[root@evan-01 ~]# echo $evan
linux
[root@evan-01 ~]# bash
[root@evan-01 ~]# echo $evan
linux
[root@evan-01 ~]#
[root@evan-01 ~]# bash
[root@evan-01 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─gssproxy───5*[{gssproxy}]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd─┬─bash───bash───bash───pstree
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@evan-01 ~]# echo $evan
linux
[root@evan-01 ~]#
同样是生效的,只要在下图红框的 shell 下,都是可以的
在evan-01(2) 下操作
[root@evan-01 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─gssproxy───5*[{gssproxy}]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd─┬─bash───bash───bash
│ └─bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@evan-01 ~]# echo $evan
[root@evan-01 ~]#
和上面的 bash 是并列关系,不属于上面的子 shell,所以不生效
unset 取消全局变量
[root@evan-01 ~]# unset evan
[root@evan-01 ~]# echo $evan
[root@evan-01 ~]#