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 ~]#