8.8-shell變量(下) export設置全局變量 、unset 取消全局變量、pstree查看系統進程

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 ~]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章