source 和export 命令的區別

bailinjun發表於2024-04-10

1、source

source 的解釋,內建的shell命令,其功能是什麼?什麼是shell?

source 指令的作用:

1、重新整理當前shell環境
2、在當前環境使用source執行Shell指令碼
3、從指令碼中匯入一個shell功能函式
4、從另一個Shell指令碼中讀取變數


一、概述


source命令是一個內建的shell命令,用於從當前shell會話中的檔案讀取和執行命令。source命令通常用於保留、更改當前shell中的環境變數。簡而言之,source一個指令碼,將會在當前shell中執行execute命令。

source命令的用法:

source FILENAME [ARGUMENTS]
source可替換為.

二、用途

1、重新整理當前shell環境

source ~/.bash_profile

家目錄下的.bash_profile 是一個隱藏檔案,主要是用來配置bash shell的。source ~/.bash_profile 則可讓這個配置檔案在修改後立即生效。


2、在當前環境使用source執行Shell指令碼

Shell指令碼不知道你在當前Shell環境中定義的變數。source命令可解決這個問題。

# 定義一個變數
[root@localhost ~] url=www.baidu.com

# 寫測試指令碼source.sh
[root@localhost ~] vi source.sh
[root@localhost ~] cat source.sh
#!/bin/sh
echo $url

#此時用sh執行指令碼
[root@localhost ~] sh source.sh
輸出為空

#用source執行指令碼時,找不到環境中定義的變數
[root@localhost ~] source source.sh
www.baidu.com

#用.執行指令碼
[root@localhost ~] . source.sh
www.baidu.com

#注意 . 和./source.sh方式的區別
[root@localhost ~] ./ source.sh
-bash: ./source.sh:Permission denied
加可執行許可權
[root@localhost ~] chmod +x source.sh
[root@localhost ~] ./ source.sh
輸出為空

以上例項,除了重點source外,sh和./的區別與聯絡,source和.的等價也需注意。


3、從指令碼中匯入一個shell功能函式

#寫指令碼定義函式tool
[root@localhost ~] vi func.sh
#!/bin/bash
tool(){
echo "function test!"
}

#在當前shell中匯入指令碼func.sh中定義的功能
[root@localhost ~] source func.sh
[root@localhost ~] tool
function test!

4、從另一個Shell指令碼中讀取變數

#建立一個帶有變數的指令碼var.sh
[root@localhost ~] vi var.sh
#!/bin/bash
a=1
b=2
c=3

#建立指令碼read.sh,指令碼內讀取var.sh的變數
[root@localhost ~] vi read.sh
#!/bin/bash
source ~/var.sh
echo $a
echo $b
echo $c

#執行read.sh檢視是否成功獲取
[root@localhost ~] sh read.sh


最後,關於exec和source:
source命令在當前shell中執行指令碼,而exec命令在新的shell中執行。


原文連結:https://blog.csdn.net/llg___/article/details/126250474

2 什麼是Linux Shell

Shell是一種命令列直譯器,它允許使用者與作業系統進行互動。在Shell中,有許多內建命令可用於執行各種任務,包括檔案操作、程序管理、環境變數設定等。在本文中,我們將詳細介紹一些常見的Shell內建命令及其示例用法。

一個命令直譯器
Shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面它接收使用者輸入的命令並把它送入核心去執行
實際上Shell是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到核心。不僅如此,Shell有自己的程式語言用於對命令的編輯,它允許使用者編寫由shell命令組成的程式。
Shell程式設計語言具有普通程式語言的很多特點,比如它也有迴圈結構和分支控制結構等,用這種程式語言編寫的Shell程式與其他應用程式具有同樣的效果。

簡介

Linux提供了像MicrosoftWindows那樣的可視的命令輸入介面--X Window圖形使用者介面GUI)。它提供了很多桌面環境系統,其操作就像Windows一樣,有視窗、圖示和選單,所有的管理都是透過滑鼠控制。GNOME
每個Linux系統的使用者可以擁有他自己的使用者介面或Shell,用以滿足他們自己專門的Shell需要。
同Linux本身一樣,Shell也有多種不同的版本。主要有下列版本的Shell:
Bourne Shell:是貝爾實驗室開發的。
BASH:是GNU的Bourne Again Shell,是GNU作業系統上預設的shell。
Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell相容。
C Shell:是SUN公司Shell的BSD版本。
Z Shell:The last shell you’ll ever need! Z是最後一個字母,也就是終極Shell。它整合了bash、ksh的重要特性,同時又增加了自己獨有的特性。

3 export

Linux export命令
功能說明:設定或顯示環境變數
語 法:export [-fnp][變數名稱]=[變數設定值]
補充說明:在shell中執行程式時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程式使用。export的效力僅及於該次登入操作。
參 數:
-f 代表[變數名稱]中為函式名稱。
-n 刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
-p 列出所有的shell賦予程式的環境變數。
中文名export
功能說明設定或顯示環境變數
語 法變數名稱]=[變數設定值]
參 數-f 代表[變數名稱]中為函式名稱
引數介紹
-f  代表[變數名稱]中為函式名稱。
-n  刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
-p  列出所有的shell賦予程式的環境變數。
一個變數建立時,它不會自動地為在它之後建立的shell程序所知。而命令export可以向後面的shell傳遞變數的值。當一個shell指令碼呼叫並執行時,它不會自動得到原來指令碼(呼叫者)裡定義的變數的訪問權,除非這些變數已經被顯式地設定為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼指令碼。
登入到系統後,系統將啟動一個使用者shell。在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell指令碼程式。執行shell指令碼程式時,系統將建立一個子shell。此時,系統中將有兩個shell,一個是登入時系統啟動的shell,另一個是系統為執行指令碼程式建立的shell。當一個指令碼程式執行完畢,它的指令碼shell將終止,可以返回到執行該指令碼之前的shell。從這種意義上來說,使用者可以有許多shell,每個shell都是由某個shell(稱為父shell)派生的。
在子shell中定義的變數只在該子shell內有效。如果在一個shell指令碼程式中定義了一個變數,當該指令碼程式執行時,這個定義的變數只是該指令碼程式內的一個區域性變數,其他的shell不能引用它,要使某個變數的值可以在其他shell中被改變,可以使用export命令對已定義的變數進行輸出。
export命令將使系統在建立每一個新的shell時定義這個變數的一個複製。這個過程稱之為變數輸出。
#echo $PKG_PATH 在任何時候建立的變數都只是當前shell的區域性變數,所以不能被shell執行的其他命令或shell程式所利用。 export ,是把你設定的環境變數傳給當前SHELL的子SHELL,使其在子SHELL中有效。

4 source 環境和export 二者區別

source 命令和 export 命令在設定環境變數方面有一些不同:

  1. source 命令:

    • source 命令用於在當前 shell 環境中執行指定的指令碼檔案,並確保其中的變數、函式等在當前 shell 中可用。
    • 主要用途是在當前 shell 中載入和執行 shell 指令碼檔案,而不是啟動一個新的子 shell 來執行指令碼。
  2. export 命令:

    • export 命令用於將變數設定為環境變數,使其在當前 shell 中可用,並且在當前 shell 中啟動的任何子程序中也可用。
    • 主要用途是將變數匯出為環境變數,以便它在當前 shell 和任何由當前 shell 啟動的子程序中都可見。

區別總結:

  • source 主要用於載入和執行指令碼檔案,在當前 shell 中設定變數和執行指令碼。
  • export 主要用於將變數設定為環境變數,以便在當前 shell 和其子程序中都可見。

在設定環境變數時,通常會結合使用這兩個命令。例如,在指令碼檔案中定義變數並使用 export 將其設定為環境變數,然後使用 source 命令來載入該指令碼檔案以確保變數在當前 shell 中可用。

相關文章