2010-09-02 60 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 

(请注意,这每一次实际上将改变你的源文件,以适当的语法它运行。)