天天看點

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

首先我們需要知道Linux的環境變量分為兩部分

全局環境變量

"env"

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

局部環境變量+全局環境變量

“set”

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

我們之前改動的"etc/profile"中的"PATH"便是其中一個全局環境變量

比較遺憾的是,我找不到隻顯示局部變量的指令,是以隻能手動找不同了

在這裡我們可以發現下圖比上圖多出了這些地方

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

為什麼會有這些差別呢,首先我們就需要知道這些變量的一些資訊

簡而言之,全局環境變量對于shell會話和所有生成的子shell都是可見的

那"可見"是什麼意思呢?簡單,"printenv"一下

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

出來的這些就是"可見"的表現了,實際上我們還能使用"env"查詢

但是相比“env”而言,"printenv"還能顯示單條的變量,而“env”不能。

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

除了"printenv"外。"echo $XXXX"也有同樣的效果

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

局部環境變量

局部環境變量相比于全局環境變量,他們隻能見于定義他們的程序之中

但這并不意味着它們不重要,相反,它們和全局環境變量一樣重要。

這裡我們就講一個局部環境變量的應用

使用者自定義變量

當我們啟動了一個shell程序的時候,這個程序的局部環境變量或者說使用者環境變量就會被建立出來

它不會以持久的形式進行儲存,意味着我們可以查詢,增加,變動和删除這些局部環境變量

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

異常簡單不是嗎?在我們後面學習shell腳本的時候,這個操作非常有用

但是越是簡單的地方,就越需要注意

首先我們可能會把程式設計的習慣帶到這裡

比如我在編碼的時候喜歡在等号前後隔一個空格來增加代碼辨識度。自認為是一個好習慣,但是在這裡,會産生錯誤

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

同時我們要注意,用這種方法建立的局部環境變量隻能在建立它的shell下可用,包括它建立的子shell也無法使用

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

那麼全局環境變量又如何呢?

這裡我們就要使用前文中使用的指令"export"

export 的基本文法是 “exprot XXXX”

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

此時我們便可以在子shell下通路到父shell建立的環境變量了

我們把“export”和之前的值結合一下

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

是不是和之前我們設定“PATH”的時候差不多呢

沒錯,我們之前使用export設定PATH便是在設定一個全局環境變量,這個全局環境變量便使得我們能夠通路那些目錄下的指令

但是我們要注意一點,我們在子shell下設定的全局環境變量無法被建立它的父shell以及父shell新建立的子shelll所通路的

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了

這意味着它同樣不是持久的,也隻是存在于shell當中,受shell的生命周期控制的

那麼,讓我們回到一開始的問題

在“PATH”設定出錯的情況下為什麼鍵入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"後就可以使用常用指令了呢?

答:

我們用“export”指令将本shell中的環境變量改回正确的路徑,使得shell能根據正确的PATH尋找相關指令

你甚至可以直接鍵入"PATH=/usr/bin"建立局部環境變量來使shell能正确通路放有Linux常用軟體。

PS

為什麼"export"在PATH設定出錯的時候仍能使用呢?

因為它使bash内置的指令,同樣是的還有"set",感興趣的同學可以自己試試

繼續閱讀