• 環境變量

    編輯
    本詞條由“匿名用戶” 建檔。

    環境變量

    編輯

    環境變量是一個動態命名的值,可以影響運行進程在計算機上的行為方式。它們是進程運行環境的一部分。例如,運行的進程可以查詢TEMP環境變量的值以找到存儲臨時文件的合適位置,也可以查詢HOME或USERPROFILE變量以查找運行進程的用戶擁有的目錄結構

    1979年,它們以現代形式與版本7 Unix一起推出,因此從那時起,它們包含在所有Unix操作系統的風味和變體中,包括Linux和macOS。從1982年的PC DOS 2.0開始,所有后續的Microsoft操作系統,包括Microsoft Windows和OS/2,也將它們作為一項功能包括在內,盡管語法、用法和標準變量名稱有所不同。

    環境變量的設計

    編輯

    在所有Unix和類Unix系統中,每個進程都有自己的單獨環境變量集。默認情況下,創建進程時,它會繼承其父進程的重復運行時環境,但父進程在創建子進程時所做的顯式更改除外。在API級別,這些更改必須在運行forkexec之間完成。或者,從bash等命令shell中,用戶可以通過env間接調用或使用ENVIRONMENT_VARIABLE=VALUE <command>符號來更改特定命令調用的環境變量。正在運行的程序可以出于配置目的訪問環境變量的值。

    Shell腳本和批處理文件使用環境變量將數據和首選項傳遞給子進程。它們還可用于存儲臨時值,供稍后在shell腳本中引用。然而,在Unix中,不導出變量更可取,因為它們不會泄漏到進程之外。

    在Unix中,在腳本或編譯程序中更改的環境變量只會影響該進程,也可能影響子進程。父進程和任何無關的進程都不會受到影響。同樣,在COMMAND.COM存在期間,更改或刪除DOS批處理文件中的變量值將更改變量。

    在Unix中,環境變量通常在系統啟動期間由系統init啟動腳本初始化,因此由系統中所有其他進程繼承。用戶可以,而且經常在他們正在使用的命令外殼的配置文件腳本中增強它們。在Microsoft Windows中,每個環境變量的默認值存儲在Windows注冊表中或設置在AUTOEXEC.BAT文件中。

    環境變量

    在Unix上,setuid程序由其調用方選擇的環境,但它以不同于調用方的權限運行。動態鏈接器通常會從環境變量$LD_LIBRARY_PATH$LD_PRELOAD指定的位置加載代碼,并使用進程的權限運行它。如果setuid程序這樣做了,它將不安全,因為其調用者可能會讓它運行任意代碼,從而濫用其權限。為此,libc在setuid進程中啟動時取消設置這些環境變量。setuid程序通常取消設置未知環境變量并檢查其他環境變量或將其設置為合理的值。

    環境變量的語法

    編輯

    這些變量可以在腳本和命令行中使用。它們通常通過在變量名稱之前或周圍放置特殊符號來引用。例如,要顯示用戶主目錄,在大多數腳本環境中,用戶必須鍵入:

    echo $HOME
    

    在DOS、OS/2和Windows命令行解釋器(如COMMAND.COMcmd.exe)中,用戶必須鍵入以下類型:

    回聲%HOME%
    

    在Windows PowerShell中,用戶必須鍵入以下類型:

    寫入輸出$env:HOMEPATH
    

    envsetprintenv命令顯示所有環境變量及其值。printenv也可以通過將該變量名稱作為命令的xxx參數來打印單個變量。

    分配

    envset命令也用于設置環境變量,通常直接集成到shell中。

    Unix

    在Unix中,以下命令也可以使用,但通常依賴于特定的shell。

    VARIABLE=value #伯恩和相關貝殼的出口變量#
    導出 ksh、bash 和相關 shell 的 VARIABLE=value #
    csh和相關shell的setenv變量值#

    一些簡單的原則指導環境變量如何實現其效果。

    環境變量是設置過程的局部變量。如果生成兩個shell進程,并且環境變量的值在一個進程中更改,則另一個進程將看不到該更改。

    創建子進程時,它將從父進程繼承所有環境變量及其值。通常,當一個程序調用另一個程序時,它首先通過分叉創建一個子進程,然后子進程根據需要調整環境,最后子進程用要調用的程序替換自己。此過程使調用程序控制被調用程序的環境。

    在Unix和類Unix系統中,環境變量的名稱區分大小寫。

    In Unix shells, variables may be assigned without the export keyword. Variables defined in this way are displayed by the set command, but are not true environment variables, as they are stored only by the shell and are unknown to all other processes. The printenv command will not display them, and child processes do not inherit them.

    VARIABLE=value
    

    前綴語法在不影響當前進程的情況下將“真實”環境變量導出給子進程:

    VARIABLE=value program_name

    環境變量的持久性可以是會話范圍的,也可以是系統范圍的。

    unset是由Unix命令行shell的Bourne shell家族(sh、ksh、bash等)和C shell家族(csh、tcsh等)實現的內置命令。它取消設置shell變量,將其從內存和shell的導出環境中刪除。它作為內置的外殼實現,因為它直接操作外殼的內部。不能取消設置只讀 shell 變量。如果試圖取消只讀變量的設置,取消設置命令將打印錯誤消息并返回非零退出代碼。

    DOS、OS/2和Windows

    在DOS、OS/2和Windows命令行解釋器(如COMMAND.COMcmd.exe)中,SET命令用于使用以下參數分配環境變量和值:

    設置VARIABLE=value
    

    SET命令沒有任何參數,顯示所有環境變量及其值。

    環境變量示例

    編輯

    環境變量的例子包括:

    • PATH:目錄路徑列表。當用戶鍵入命令而不提供完整路徑時,會檢查此列表,以查看它是否包含指向該命令的路徑。
    • HOME(類Unix)和USERPROFILE(Microsoft Windows):指示用戶的家庭目錄在文件系統中的位置。
    • HOME/{.AppName} (Unix-like) and APPDATA{DeveloperNameAppName} (Microsoft Windows): for storing application settings. Many applications incorrectly use USERPROFILE for application settings in Windows: USERPROFILE should only be used in dialogs that allow user to choose between paths like Documents/Pictures/Downloads/Music; for programmatic purposes, APPDATA (for roaming application settings shared across multiple devices), LOCALAPPDATA (for local application settings) or PROGRAMDATA (for application settings shared between multiple OS users) should be used.
    • TERM (Unix-like): specifies the type of computer terminal or terminal emulator being used (e.g., vt100 or dumb).
    • PS1(類Unix):指定提示符如何在伯恩殼和變體中顯示。
    • MAIL(類Unix):用于指示在哪里可以找到用戶的郵件
    • TEMP:進程可以存儲臨時文件的位置。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/122249/

    (5)
    詞條目錄
    1. 環境變量
    2. 環境變量的設計
    3. 環境變量的語法
    4. 分配
    5. Unix
    6. DOS、OS/2和Windows
    7. 環境變量示例

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久