2016-10-22 57 views
0

我有類似的東西在一個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是否等於令牌的值。
然而,也許有更簡單的事情?

回答

2

只要運行你的SETENV +配置+使用括號使子shell:

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

它繼承了在副本環境,所以在退出子shell當你得到完全相同的「以前」的狀態:沒有env。變量會在您的腳本中發生更改,並且更多configure命令可以正常工作。

+0

簡單和輝煌!謝謝! –

+1

確保任何命令正在運行,不過,預計不會改變當前的環境。 (也就是說,確保你沒有在'(...)'中找到任何shell腳本。 – chepner