簡體   English   中英

恢復先前的值或未設置環境變量

[英]Restore previous value or unset environment variable

我在Shell腳本中有類似的內容

cd /some/folder1
savedCFLAGS=${CFLAGS-}
export CFLAGS="-fexceptions ${CFLAGS-}"
./configure --some-option -what-ever
make
export CFLAGS=${savedCFLAGS}

cd /some/folder2
./configure --some-option -what-ever
make

這或多或少正確地起作用,但是有一個嚴重的缺陷。
如果先前未設置CFLAGS,則在第一個程序段之后將其置空。
有時,這是一個問題,因為某些配置腳本僅在未設置變量時才使用默認值-如果變量只是空的,則不會使用默認值。

我還要指出,我在腳本中多次使用了這樣的構造,並帶有多個不同的變量(這是一個用於構建完整的基於GCC的工具鏈的腳本)。

將變量恢復到以前的值(如果實際上是先前設置的)或取消設置(如果在修改之前未設置)的最簡單方法是什么?
我可以將savedCFLAGS設置為某些特殊令牌(如果未設置),然后測試一下savedCFLAGS是否具有等於該令牌的值。
但是,也許有更簡單的東西嗎?

只需使用括號在子shell中運行setenv + configure + make:

(export CFLAGS="-fexceptions ${CFLAGS-}";./configure --some-option -what-ever; make)

它在副本中繼承了環境,因此,退出子Shell時,您將獲得完全相同的“先前”狀態:無環境。 變量會在腳本中更改,並且進一步的configure命令可以正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM