Visual Studio 2008 和 Windows 環境變量對設定 相對路徑很重要,這樣便于代碼的移植,即使換一台計算機,代碼不用更改配置,直接就能用。
可以在項目的“工具”“屬性頁”對話框中任何接受字元串的位置使用這些宏。這些宏不區分大小寫。
宏
說明
$(RemoteMachine)
$(Configuration)
目前項目配置的名稱(例如“Debug”)。
$(Platform)
目前項目平台的名稱(例如“Win32”)。
$(RootNameSpace)
包含應用程式的命名空間(如果有)。
$(IntDir)
為中間檔案指定的相對于項目目錄的目錄路徑。此路徑應具有尾部斜杠。這解析為 Intermediate Directory 屬性的值。
$(OutDir)
輸出檔案目錄的路徑,相對于項目目錄。此路徑應具有尾部斜杠。這解析為 Output Directory 屬性的值。
$(DevEnvDir)
Visual Studio 2010 的安裝目錄(定義為驅動器 + 路徑);包括尾部反斜杠“/”。
$(ProjectDir)
項目的目錄(定義形式:驅動器 + 路徑);包括尾部的反斜杠“/”。
$(ProjectPath)
項目的絕對路徑名(定義形式:驅動器 + 路徑 + 基本名稱 + 檔案擴充名)。
$(ProjectName)
項目的基名稱。
$(ProjectFileName)
項目的檔案名(定義為基本名稱 + 檔案擴充名)。
$(ProjectExt)
項目的檔案擴充名。它包括“.”在檔案擴充名之前。
$(SolutionDir)
解決方案的目錄(定義形式:驅動器 + 路徑);包括尾部的反斜杠“/”。
$(SolutionPath)
解決方案的絕對路徑名(定義形式:驅動器 + 路徑 + 基本名稱 + 檔案擴充名)。
$(SolutionName)
解決方案的基名稱。
$(SolutionFileName)
解決方案的檔案名(定義為基本名稱 + 檔案擴充名)。
$(SolutionExt)
解決方案的檔案擴充名。它包括“.”在檔案擴充名之前。
$(TargetDir)
生成的主輸出檔案的目錄(定義形式:驅動器 + 路徑);包括尾部的反斜杠“/”。
$(TargetPath)
生成的主輸出檔案的絕對路徑名(定義形式:驅動器 + 路徑 + 基本名稱 + 檔案擴充名)。
$(TargetName)
生成的主輸出檔案的基本名稱。
$(TargetFileName)
生成的主輸出檔案的檔案名(定義為基本名稱 + 檔案擴充名)。
$(TargetExt)
生成的主輸出檔案的檔案擴充名。它包括“.”在檔案擴充名之前。
$(VSInstallDir)
安裝 Visual Studio 2010 的目錄。
此屬性包含目标 Visual Studio 的版本,該版本可能與宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 進行生成時,$(VSInstallDir) 包含 Visual Studio 2008 安裝位置的路徑。
$(VCInstallDir)
安裝 Visual C++ 2010 的目錄。
此屬性包含目标 Visual C++ 的版本,該版本可能與宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 進行生成時,$(VCInstallDir) 包含 Visual C++ 2008 安裝位置的路徑。
$(FrameworkDir)
安裝 .NET Framework 的目錄。
$(FrameworkVersion)
Visual Studio 使用的 .NET Framework 版本。與 $(FrameworkDir) 相結合,就是 Visual Studio 使用的 .NET Framework 版本的完整路徑。
$(FrameworkSDKDir)
安裝 .NET Framework 的目錄。.NET Framework 可能已作為 Visual Studio 2010 的一部分安裝,也可能單獨安裝。
$(WebDeployPath)
$(WebDeployRoot)
指向 <localhost> 位置的絕對路徑。例如,c:/inetpub/wwwroot。
$(FxCopDir)
fxcop.cmd 檔案的路徑。fxcop.cmd 檔案不和所有的 Visual C++ 版本一起安裝。
Visual Studio 2010
>>Visual Studio
>>Visual Studio 語言
>>Visual C++
>>Building a C/C++ Program
>>在 Visual Studio 中生成 C++ 項目
>>用于生成指令和屬性的宏
<a href="http://www.cnblogs.com/owen-zhang/archive/2010/01/07/VisualStudioTemporaryFilesFolder.html" target="_blank">http://www.cnblogs.com/owen-zhang/archive/2010/01/07/VisualStudioTemporaryFilesFolder.html</a>
Visual Studio臨時檔案存放的檔案夾
在使用Visual Studio開發工具的過程中,Visual Studio會在如下檔案夾(以VS2008和.NET Framework 2.0為例)中生成一些臨時性的檔案:
1、ReflectedSchemas:完整路徑為“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas”。
2、ReflectedTypeLibs:完整路徑為“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs”。
3、Temporary ASP.NET Files:完整路徑為“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files“。
我的系統不是C槽,使用者名也不是Administrator,有批處理指令中用環境變量:
1、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas
2、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs
3、%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
Windows系統路徑環境變量
%SystemDrive% 作業系統所在的分區号。如 C:
%SystemRoot% 作業系統根目錄。如 C:\WINDOWS
%windir% 作業系統根目錄。如 C:\WINDOWS
%ALLUSERSPROFILE% 相當于 C:\Documents and Settings\All Users
%APPDATA% 相當于 C:\Documents and Settings\使用者目錄\Application Data
%ProgramFiles% 相當于 C:\Program Files
%CommonProgramFiles% 相當于 C:\Program Files\Common Files
%HOMEDRIVE% 作業系統所在的分區号。如:C:
%HOMEPATH% 相當于 \Documents and Settings\使用者目錄
%USERPROFILE% 相當于 C:\Documents and Settings\使用者目錄
%HOMEDRIVE% = C:\ 目前啟動的系統的所在分區
%SystemRoot% = C:\WINDOWS 目前啟動的系統的所在目錄
%windir% = %SystemRoot% = C:\WINDOWS 目前啟動的系統的所在目錄
%USERPROFILE% = C:\Documents and Settings\sihochina 目前使用者資料變量
%HOMEPATH% = C:\Documents and Settings\sihochina 目前使用者環境變量
%system% = C:\WINDOWS\SYSTEM32
%ALLUSERSPROFILE% : 列出所有使用者Profile檔案位置。
%APPDATA% : 列出應用程式資料的預設存放位置。
%CD% : 列出目前目錄。
%CLIENTNAME% : 列出聯接到終端服務會話時用戶端的NETBIOS名。
%CMDCMDLINE% : 列出啟動目前cmd.exe所使用的指令行。
%CMDEXTVERSION% : 指令出目前指令處理程式擴充版本号。
%CommonProgramFiles% : 列出了常用檔案的檔案夾路徑。
%COMPUTERNAME% : 列出了計算機名。
%COMSPEC% : 列出了可執行指令外殼(指令處理程式)的路徑。
%DATE% : 列出目前日期。
%ERRORLEVEL% : 列出了最近使用的指令的錯誤代碼。
%HOMEDRIVE% : 列出與使用者主目錄所在的驅動器盤符。
%HOMEPATH% : 列出使用者主目錄的完整路徑。
%HOMESHARE% : 列出使用者共享主目錄的網絡路徑。
%LOGONSEVER% : 列出有效的目前登入會話的域名控制器名。
%NUMBER_OF_PROCESSORS% : 列出了計算機安裝的處理器數。
%OS% : 列出作業系統的名字。(Windows XP 和 Windows 2000 列為 Windows_NT.)
%Path% : 列出了可執行檔案的搜尋路徑。
%PATHEXT% : 列出作業系統認為可被執行的檔案擴充名。
%PROCESSOR_ARCHITECTURE% : 列出了處理器的晶片架構。
%PROCESSOR_IDENTFIER% : 列出了處理器的描述。
%PROCESSOR_LEVEL% : 列出了計算機的處理器的型号。
%PROCESSOR_REVISION% : 列出了處理器的修訂号。
%ProgramFiles% : 列出了Program Files檔案夾的路徑。
%PROMPT% : 列出了目前指令解釋器的指令提示設定。
%RANDOM% : 列出界于0 和 32767之間的随機十進制數。
%SESSIONNAME% : 列出連接配接到終端服務會話時的連接配接和會話名。
%SYSTEMDRIVE% : 列出了Windows啟動目錄所在驅動器。
%SYSTEMROOT% : 列出了Windows啟動目錄的位置。
%TEMP% and %TMP% : 列出了目前登入的使用者可用應用程式的預設臨時目錄。
%TIME% : 列出目前時間。
%USERDOMAIN% : 列出了包含使用者帳号的域的名字。
%USERNAME% : 列出目前登入的使用者的名字。
%USERPROFILE% : 列出目前使用者Profile檔案位置。
%WINDIR% : 列出作業系統目錄的位置。
變量 類型 描述
%ALLUSERSPROFILE% 本地 傳回“所有使用者”配置檔案的位置。
%APPDATA% 本地 傳回預設情況下應用程式存儲資料的位置。
%CD% 本地 傳回目前目錄字元串。
%CMDCMDLINE% 本地 傳回用來啟動目前的 Cmd.exe 的準确指令行。
%CMDEXTVERSION% 系統 傳回目前的“指令處理程式擴充”的版本号。
%COMPUTERNAME% 系統 傳回計算機的名稱。
%COMSPEC% 系統 傳回指令行解釋器可執行程式的準确路徑。
%DATE% 系統 傳回目前日期。使用與 date /t 指令相同的格式。由 Cmd.exe 生成。有關 date 指令的詳細資訊,請參閱 Date。
%ERRORLEVEL% 系統 傳回上一條指令的錯誤代碼。通常用非零值表示錯誤。
%HOMEDRIVE% 系統 傳回連接配接到使用者主目錄的本地工作站驅動器号。基于主目錄值而設定。使用者主目錄是在“本地使用者群組”中指定的。
%HOMEPATH% 系統 傳回使用者主目錄的完整路徑。基于主目錄值而設定。使用者主目錄是在“本地使用者群組”中指定的。
%HOMESHARE% 系統 傳回使用者的共享主目錄的網絡路徑。基于主目錄值而設定。使用者主目錄是在“本地使用者群組”中指定的。
%LOGONSERVER% 本地 傳回驗證目前登入會話的域控制器的名稱。
%NUMBER_OF_PROCESSORS% 系統 指定安裝在計算機上的處理器的數目。
%OS% 系統 傳回作業系統名稱。Windows 2000 顯示其作業系統為 Windows_NT。
%PATH% 系統 指定可執行檔案的搜尋路徑。
%PATHEXT% 系統 傳回作業系統認為可執行的檔案擴充名的清單。
%PROCESSOR_ARCHITECTURE% 系統 傳回處理器的晶片體系結構。值:x86 或 IA64(基于 Itanium)。
%PROCESSOR_IDENTFIER% 系統 傳回處理器說明。
%PROCESSOR_LEVEL% 系統 傳回計算機上安裝的處理器的型号。
%PROCESSOR_REVISION% 系統 傳回處理器的版本号。
%PROMPT% 本地 傳回目前解釋程式的指令提示符設定。由 Cmd.exe 生成。
%RANDOM% 系統 傳回 0 到 32767 之間的任意十進制數字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系統 傳回包含 Windows server operating system 根目錄(即系統根目錄)的驅動器。
%SYSTEMROOT% 系統 傳回 Windows server operating system 根目錄的位置。
%TEMP% 和 %TMP% 系統和使用者 傳回對目前登入使用者可用的應用程式所使用的預設臨時目錄。有些應用程式需要 TEMP,而其他應用程式則需要 TMP。
%TIME% 系統 傳回目前時間。使用與 time /t 指令相同的格式。由 Cmd.exe 生成。有關 time 指令的詳細資訊,請參閱 Time。
%USERDOMAIN% 本地 傳回包含使用者帳戶的域的名稱。
%USERNAME% 本地 傳回目前登入的使用者的名稱。
%USERPROFILE% 本地 傳回目前使用者的配置檔案的位置。
%WINDIR% 系統 傳回作業系統目錄的位置。
%temp% = %USERPROFILE%\Local Settings\Temp = C:\Documents and Settings\sihochina\Local Settings\Temp 目前使用者TEMP緩存變量
------------------------------------------------------------------------
例如:%windir%\drives 的實際路徑就是 C:\WINDOWS\drives 目錄。
所謂變量,就是指一個在不同環境中會有相對不同的值的、但在所有環境中都有相同約定的含義的量。
這些變量,可以在開始菜單-運作中輸入,如輸入%SystemRoot% ,系統會直接打開 C:\WINDOWS 目錄。
如果你目前的系統是裝在D盤的2000的話,上邊這個變量的執行結果就是打開 D:\WINNT 目錄了。
首先明确一點: 所有的在cmd指令行下對環境變量的修改隻對目前視窗有效,不是永久性的修改。也就是說當關閉此cmd指令行視窗後,将不再起作用。
永久性修改環境變量的方法有兩種:一種是直接修改系統資料庫(此種方法目前沒試驗過),另一種是通過我的電腦-〉屬性-進階,來設定系統的環境變量(檢視詳細)。
其次,明确一下環境變量的作用。
它是作業系統用來指定運作環境的一些參數。比如臨時檔案夾位置和系統檔案夾位置等。當你運作某些程式時,除了在目前檔案夾中尋找外,還會到這些環境變量中去查找,比如“Path”就是一個變量,裡面存儲了一些常用的指令所存放的目錄路徑。
第三:什麼情況下進行設定?
當啟動cmd指令行視窗調用某一指令的時候,經常會出現“xxx不是内部或外部指令,也不是可運作的程式或批處理檔案”,如果你的拼寫沒有錯誤,同時計算機中确實存在這個程式,那麼出現這個提示就是你的path變量沒有設定正确,因為你的path路徑,也就是預設路徑裡沒有你的程式,同時你有沒有給出你程式的絕對路徑(因為你隻是輸入了指令或程式的名稱而已),這是作業系統不知道去哪兒找你的程式,就會提示這個問題。
第四:如何修改?
1、檢視目前所有可用的環境變量:輸入 set 即可檢視。
2、檢視某個環境變量:輸入 “set 變量名”即可,比如想檢視path變量的值,即輸入 set path
3、修改環境變量 :輸入 “set 變量名=變量内容”即可,比如将path設定為“d:\nmake.exe”,隻要輸入set path="d:\nmake.exe"。注意,此修改環境變量是指用現在的内容去覆寫以前的内容,并不是追加。比如當我設定了上面的path路徑之後,如果我再重新輸入set path="c",再次檢視path路徑的時候,其值為“c:”,而不是“d:\nmake.exe”;“c”。
4、設定為空:如果想将某一變量設定為空,輸入“set 變量名= ”即可。如“set path=” 那麼檢視path的時候就為空。注意,上面已經說了,隻在目前指令行視窗起作用。是以檢視path的時候不要去右擊“我的電腦”——“屬性”........
5、給變量追加内容(不同于3,那個是覆寫):輸入“set 變量名=%變量名%;變量内容”。如,為path添加一個新的路徑,輸入“ set path=%path%;d:\nmake.exe”即可将d:\nmake.exe添加到path中,再次執行"set path=%path%;c:",那麼,使用set path語句來檢視的時候,将會有:d:\nmake.exe;c:,而不是像第3步中的隻有c:。
附錄:下面貼上一些常用的環境變量及作用
%ALLUSERSPROFILE% 局部 傳回所有“使用者配置檔案”的位置。
%APPDATA% 局部 傳回預設情況下應用程式存儲資料的位置。
%CD% 局部 傳回目前目錄字元串。
%CMDCMDLINE% 局部 傳回用來啟動目前的 Cmd.exe 的準确指令行。
%COMPUTERNAME% 系統 傳回計算機的名稱。
%COMSPEC% 系統 傳回指令行解釋器可執行程式的準确路徑。
%DATE% 系統 傳回目前日期。使用與 date /t 指令相同的格式。由 Cmd.exe 生成。有關 date 指令的詳細資訊,請參閱Date。
%ERRORLEVEL% 系統 傳回最近使用過的指令的錯誤代碼。通常用非零值表示錯誤。
%HOMEDRIVE% 系統 傳回連接配接到使用者主目錄的本地工作站驅動器号。基于主目錄值的設定。使用者主目錄是在“本地使用者群組”中指定的。
%HOMEPATH% 系統 傳回使用者主目錄的完整路徑。基于主目錄值的設定。使用者主目錄是在“本地使用者群組”中指定的。
我也一直不明白,以下兩篇文章就能說明問題.
--------------------------------------------------
标題: 怎樣用腳本來設定環境變量
我想編一個腳本程式,用來對一組環境變量進行設定或取消
但由于腳本程式對變量的設定在退出腳本後就消失了,有沒有間接辦法能夠實作這個功能?
你說的是 export ?
在腳本中使用export, 好像隻在腳本中有效,退出這個腳本,設定的變量就沒有了
在你的腳本中做設定
在~/.profile 或 ~/.bashrc 等 用source運作
我試了一下,
用source可以運作普通的shell腳本,也可達到設定環境變量的目的,
想問一下source是什麼指令?用man和info沒有查到說明
source 是 bash 的内嵌指令,
man bash
/source filename \[arguments\]
Thank u
source filename
or
代碼:
. filename
source好像不一定是bash的‘内嵌指令’
忘了是哪個發行版了
source是外部指令
$ type source
source is a shell builtin
哪個BT的發行版把 source 外部化了?忽忽。。
我自己也是一個菜鳥,接觸linux沒有多久,最近在學習BASH的export指令時碰到了一個難道(書
上說export是将自定義變量變成系統環境變量):我在一個腳本檔案中定義一個了變量,然後expor
t變量,按照我自己的想法,執行完這個腳本後,在提示符下一定可以用echo顯示出它的值,可結
果卻不是這樣,腳本執行完後用set根本看不到有這個變量存在。為什麼呢?我百思不得其解,最後
将問題貼出來,一位前輩告訴我說用source+腳本檔案就可以了,我試了一下果然可以,但一個新
的問題又出來了。我将腳本中export指令删除後,用source一樣可以。那這個export好像沒有什麼
用呀。
在經過多次嘗試後發現了一些東西,是我自己猜的,如果有什麼不對的地方,請指正,謝謝。
執行一個腳本時,會先開啟一個子 shell環境(不知道執行其它程式是不是這樣),然後将父shell
中的所有系統環境變量複制過來,這個腳本中的語句就在子shell中執行。(也就是說父shell的環境
變量在子shell中可以調用,但反過來就不行,如果在子shell中定義了環境變量,隻對該shell或者它
的子shell有效,當該子shell結束時,也可以了解為腳本執行完時,變量消失。)為了證明這一點,
請看腳本内容:
test='value'
export test
這樣的腳本執行完後,test實際上是不存在的。接着看下面的:
bash
這裡在腳本最後一行再開一個子shell,該shell應該是腳本檔案所在shell的子shell,這個腳本執行完
後,是可以看到test這個變量的,因為現在是處于它的子shell中,當用exit退出子shell後,test變量
消失。
如果用source對腳本進行執行時,<b>如果不加export,就不會在子shell中看到這個變量</b>,因
為它還不是一個系統環境變量呀,如腳本内容是:
用 source執行後,在shell下是能看到這個變量,但再執行bash開一個子shell時,test是不會被複
Page 1 of 怎樣用腳本來設定環境變量
行時,是不會輸入任何東西的,内容如:echo $test。是以這點特别注意了,明明在提示符下可以
用echo $test輸出變量值,為什麼把它放進腳本檔案就不行了呢?
是以得出的結論是:1、執行腳本時是在一個子shell環境運作的,腳本執行完後該子shell自動退
出;2、一個shell中的系統環境變量才會被複制到子shell 中(用export定義的變量);3、一個shell
中的系統環境變量隻對該shell或者它的子shell有效,該shell結束時變量消失(并不能傳回到父shell
中)。3、不用export定義的變量隻對該shell有效,對子shell也是無效的。
後來根據版主的提示,整理了一下貼子:為什麼一個腳本直接執行和用source執行不一行呢?這也
是我自己碰到的一個問題。manual原文是這樣的:Read and execute commands from filename in
the current shell environment and return the exit status of the last command executed from filena
me.明白了為什麼不一樣了吧?直接執行一個腳本檔案是在一個子shell中運作的,而source則是在
目前shell環境中運作的。根據前面的内容,你也已經明白其中的道理了吧。
困擾了我幾天的問題終于可以圓滿的解決了。
不過還有一個問題,聽說子shell的環境變量與父shell的也不完全一樣,究竟差别是什麼?
source指令:
source指令也稱為“點指令”,也就是一個點符号(.)。source指令通常用于重新執行剛修改的初
始化檔案,使之立即生效,而不必登出并重新登入。
用法:
source filename 或 . filename
source指令除了上述的用途之外,還有一個另外一個用途。在對編譯系統核心時常常需要輸入一長
串的指令,如:
make mrproper
make menuconfig
make dep
make clean
make bzImage
…………
如果把這些指令做成一個檔案,讓它自動順序執行,對于需要多次反複編譯系統核心的使用者來說會
很友善,而用source指令就可以做到這一點,它的作用就是把一個檔案的内容當成shell來執行,先
在linux的源代碼目錄下(如/usr/src/linux-2.4.20)建立一個檔案,如 make_command,在其中輸
入一下内容:
make mrproper &&
make menuconfig &&
make dep &&
make clean &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImage /boot/vmlinuz_new &&
cp System.map /boot &&
vi /etc/lilo.conf &&
lilo -v
檔案建立好之後,每次編譯核心的時候,隻需要在/usr/src/linux-2.4.20下輸入:
source make_command
即可,如果你用的不是lilo來引導系統,可以把最後兩行去掉,配置自己的引導程式來引導核心。
順便補充一點,&&指令表示順序執行由它連接配接的指令,但是隻有它之前的指令成功執行完成了之後
才可以繼續執行它後面的指令。
==============================================================
1、引言
Page 2 of 怎樣用腳本來設定環境變量
d not found”的提示内容。如果每次都到安裝目标檔案夾内,找到可執行檔案來進行操作就太繁瑣
了。這涉及到環境變量PATH的設定問題,而PATH的設定也是在linux下定制環境變量的一個組成
部分。本文基于RedHat 9.0,詳細講解了環境變量定制的問題。
2、變量簡介
Linux是一個多使用者的作業系統。每個使用者登入系統後,都會有一個專用的運作環境。通常每
個使用者預設的環境都是相同的,這個預設環境實際上就是一組環境變量的定義。使用者可以對自己的
運作環境進行定制,其方法就是修改相應的系統環境變量。
3、定制環境變量
環境變量是和Shell緊密相關的,使用者登入系統後就啟動了一個Shell。對于Linux來說一般是
bash,但也可以重新設定或切換到其它的 Shell。根據發行版本的情況,bash有兩個基本的系統級
配置檔案:/etc/bashrc和/etc/profile。這些配置檔案包含兩組不同的變量:shell變量和環境變量。
前者隻是在特定的shell中固定(如bash),後者在不同shell中固定。很明顯,shell變量是局部的,
而環境變量是全局的。環境變量是通過Shell指令來設定的,設定好的環境變量又可以被所有目前用
戶所運作的程式所使用。對于bash這個Shell程式來說,可以通過變量名來通路相應的環境變量,
通過export來設定環境變量。下面通過幾個執行個體來說明。
3.1 使用指令echo顯示環境變量
#本例使用echo顯示常見的變量HOME
$ echo $HOME
/home/lqm
3.2 設定一個新的環境變量
$ export HELLO=”Hello!”
$ echo $HELLO
Hello!
3.3 使用env指令顯示所有的環境變量
$ env
SSH_AGENT_PID=1875
HOSTNAME=lqm
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
……
3.4 使用set指令顯示所有本地定義的Shell變量
$ set
BASH=/bin/bash
3.5 使用unset指令來清除環境變量
$ export TEST=”test” #增加一個環境變量TEST
$ env | grep TEST #此指令有輸出,證明環境變量TEST已經存在了
TEST=test
$ unset $TEST #删除環境變量TEST
$ env | grep TEST #此指令無輸出,證明環境變量TEST已經存在了
3.6 使用readonly指令設定隻讀變量
如果使用了readonly指令的話,變量就不可以被修改或清除了。示例如下:
$ export TEST="Test..." #增加一個環境變量TEST
$ readonly TEST #将環境變量TEST設為隻讀
$ unset TEST #會發現此變量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #會發現此變量不能被修改
-bash: TEST: readonly variable
3.7 用C程式來通路和設定環境變量
對于C程式的使用者來說,可以使用下列三個函數來設定或通路一個環境變量。
getenv() 通路一個環境變量。輸入參數是需要通路的變量名字,傳回值是一個字元串。如果所
通路的環境變量不存在,則會傳回NULL。
setenv() 在程式裡面設定某個環境變量的函數。
unsetenv() 清除某個特定的環境變量的函數。
另外,還有一個指針變量environ,它指向的是包含所有的環境變量的一個清單。下面的程式可
以列印出目前運作環境裡面的所有環境變量:
#include <stdio.h>
extern char**environ;
int main ()
{
char**var;
for (var =environ;*var !=NULL;++var)
printf ("%s \n ",*var);
return 0;
}
3.8 通過修改環境變量定義檔案來修改環境變量。
需要注意的是,一般情況下,這僅僅對于普通使用者适用,避免修改根使用者的環境定義檔案,因
為那樣可能會造成潛在的危險。
$cd #到使用者根目錄下
$ls -a #檢視所有檔案,包含隐藏的檔案
$vi .bash_profile #修改環境變量定義檔案
然後編輯你的PATH聲明,其格式為:
PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
你可以自己加上指定的路徑,中間用冒号隔開。環境變量更改後,在使用者下次登陸時生效,如
果想立刻生效,則可執行下面的語句:$source .bash_profile
需要注意的是,最好不要把目前路徑”./”放到PATH裡,這樣可能會受到意想不到的攻擊。完
成後,可以通過$ echo $PATH檢視目前的搜尋路徑。這樣定制後,就可以避免頻繁的啟動位于shel
l搜尋的路徑之外的程式了。
4 總結
通過以上的設定,你可以有一個比較友善有效的環境來提高你的
<a href="http://www.360doc.com/content/12/0211/14/6828497_185770493.shtml">http://www.360doc.com/content/12/0211/14/6828497_185770493.shtml</a>
UNIX Programming FAQ 中文版 v0.1.0
<a href="http://www.linuxforum.net/books/upfaq/c46.htm">Prev</a>
Chapter 1. 程序控制
<a href="http://www.linuxforum.net/books/upfaq/x152.htm">Next</a>
獲得一個環境變量可以通過調用‘getenv()’函數完成。
設定一個環境變量可以通過調用‘putenv()’函數完成。
變量string應該遵守"name=value"的格式。已經傳遞給putenv函數的字元串*不*能夠被釋放或變成無效,因為一個指向它的指針将由‘putenv()’儲存。這意味着它必須是在靜态資料區中或是從堆(heap)配置設定的。如果這個環境變量被另一個‘putenv()’的調用重新定義或删除,上述字元串可以被釋放。
/**************************譯者增加***********************************
因為putenv()有這樣的局限,在使用中經常會導緻一些錯誤,GNU libc 中還包括了兩個BSD風格的函數:
setenv()/unsetenv()函數可以完成所有putenv()能做的事。setenv() 可以不受指針限制地向環境變量中添加新值,但傳入參數不能為空(NULL)。當replace為0時,如果環境變量中已經有了name項,函數什麼也不做(保留原項),否則原項被覆寫。 unsetenv()是用來把name項從環境變量中删除。注意:這兩個函數隻存在在BSD和GNU 庫中,其他如SunOS系統中不包括它們,是以将會帶來一些相容問題。我們可以用 getenv()/putenv()來實作:
**************************譯者增加***********************************/
記住環境變量是被繼承的;每一個程序有一個不同的環境變量表拷貝(譯者注:從core檔案中我們可以看出這一點)。結果是,你不能從一個其他程序改變目前程序的環境變量,比如shell程序。
假設你想得到環境變量‘TERM’的值,你需要使用下面的程式:
現在假設你想建立一個新的環境變量,變量名為‘MYVAR’,值為‘MYVAL’。以下是你将怎樣做:
如果你不知道确切你想要的環境變量的名字,那麼‘getenv()’函數不是很有用。在這種情況下,你必須更深入了解環境變量表的存儲方式。
全局變量,‘char **envrion’,包含指向環境字元串指針數組的指針,每一個字元串的形式為‘“NAME=value”’(譯者注:和putenv()中的“string”的格式相同)。這個數組以一個‘空’(NULL)指針标記結束。這裡是一個列印目前環境變量清單的小程式(類似‘printenv’)。
一般情況下,‘envrion’變量作為可選的第三個參數傳遞給‘main()’;就是說,上面的程式可以寫成:
雖然這種方法被廣泛的操縱系統所支援(譯者注:包括DOS),這種方法事實上并沒有被POSIX(譯者注:POSIX: Portable Operating System Interace)标準所定義。(一般的,它也比較沒用)
<a href="http://www.linuxforum.net/books/upfaq/x124.htm">http://www.linuxforum.net/books/upfaq/x124.htm</a>
ANSI C标準提供了一個名為getenv()的函數來完成這項任務。getenv()函數很簡單一把指向要查找的環境串的指針傳遞給它,它就傳回一個指向該變量值的指針。下面的程式說明了如何從C中獲得環境變量PATH的值:
# include <stdlib. h>
main(int argc, char * * argv)
char envValue[l29]; / * buffer to store PATH * /
char * envPtr = envValue ; / * pointer to this buffer * /
envPtr = getenv("PATH"); /* get the PATH */
printf ("PATH= %s\n" , envPtr) ; / * print the PATH * /
如果你編譯并運作了這個程式,你就會看到與在DOS提示符下輸入PATH指令完全相同的結果。事實上,你可以用getenv()檢索AUTOEXEC.BAT檔案中的或者系統引導後在DOS揭示符下輸入的所有環境變量的值。
這裡有一個小技巧。當運作Windows時,Windows設定了一個名為WINDIR的新的環境變量,它包含了Windows目錄的路徑全名。下面這段簡單的程式用來檢索這個串:
main(int argc, char * * argv)
char envValue[l29];
char * envPtr = envValue ;
envPtr = getenv("windir");
/ * print the Windows directory * /
printf("The Windows Directory is %s\n" , envPtr);
這個程式還可以用來判斷目前是否正在運作Windows,以及DOS程式是否運作在一個DOS shell下,而不是運作在“真正的"DOS下。注意,程式中的windir字元串是小寫——這一點很重要,因為它對大小寫是敏感的。如果你使用WINDIR,getenv()就會傳回一個NULL串(表示變量未找到錯誤)。
用一putenv()函數也可以設定環境變量。但要注意,該函數不是一個ANSI标準函數,在某些編譯程式中它可能不以這個名字出現,或者根本就不存在。你可以用一putenv()函數做許多事情。實際上,在上面那個例子中,Windows正是用這個函數建立了windir環境變量。
<a href="http://see.xidian.edu.cn/cpp/html/1641.html">http://see.xidian.edu.cn/cpp/html/1641.html</a>
In VS 2008 and VS 2005 at least, you can specify changes to environment variables in the project settings.
Open your project. Go to Project>Properties... Under Configuration Properties>Debugging, edit the 'Environment' value to set environment variables.
For example, if you want to add the directory "c:\foo\bin" to the path when debugging your app, set the 'Environment' value to"PATH=%PATH%;c:\foo\bin".
Here's a screenshot of the setting s dialog:

<a href="http://www.404qa.com/q-182.html">http://www.404qa.com/q-182.html</a>
參考網址: