2010-09-02 38 views
3

我希望能夠創建一個文件來設置一些環境變量,但這樣做與獨立於正在使用的shell無關。Tcsh和Bash初始化

例如

%: source START.env 

# START.env 
if [ $SHELL == "bash" ]; then 
    source START.env.bash # sets environment variables 
else 
    source START.env.tcsh # sets environment variables 
fi 

然而,這個代碼將只爲bash的工作。如何使它兼容bash和tcsh?

我必須獲取文件的源代碼,因爲我希望環境變量在之後保持不變。

回答

1

因此,我最終用完整的DSL方法來解決這個問題(請參閱clamshell)。

2

對於tcsh創建變量文件:

setenv FOO 42 
setenv BAR baz 
setenv BAZ "foo bar" 

在你的tcsh腳本使用:

source filename 

在你的bash腳本使用:

while read -r cmd var val 
do 
    if [[ $cmd == "setenv" ]] 
    then 
     declare -x "$var=$val" 
    fi 
done < filename 

這將是有些困難創建一個可以在tcsh和Bash上運行的腳本。

1

你可以做丹尼斯說的。或者,我認爲這是稍微更雄辯

(在bash)

sed -i 's/setenv \([a-zA-Z0-9_]*\) /declare -x \1=/g' filename 
source filename 

(在tcsh的腳本)

sed -i 's/declare -x \([a-zA-Z0-9_]*\)=/setenv \1 /g' filename 
source filename 

(請注意,這每一次實際上將改變你的源文件,以適當的語法它運行。)