在bash脚本中使用source

时间:2012-06-06 11:22:54

标签: perl bash env perlbrew

我使用perlbrew在CentOS 5.x服务器上安装了一些需要Perl 5.010的代码,它需要两行

source ~/perl5/perlbrew/etc/bashrc

perlbrew switch perl-5.10.1

要在我的/ usr / bin / env中使用perl 5.010之前在shell中执行,所以我尝试创建以下可执行bash脚本以将这两个步骤最小化到./setEnv.sh

#!/bin/bash
echo "**setting environment variables - 'perlbrew switch-off' to exit"
SETSOURCE= `source ~/perl5/perlbrew/etc/bashrc`
echo $SETSOURCE
SETPERL= `perlbrew switch perl-5.10.1`
echo $SETPERL

2 个答案:

答案 0 :(得分:2)

进程无法修改其父环境,因此自从shebang以来你做错了。

在反引号(subshel​​l)中执行源只影响子shell,并在命令执行后结束。

    $ ### test.sh assign "inside" to TEST
    $ TEST='outside'; echo "$(source test.sh; echo $TEST)" - $TEST
    inside - outside

您可能想要做的是直接从您的shell中获取setEnv.sh脚本。

    $ ### test.sh assign "inside" to TEST
    $ TEST='outside'; source test.sh; echo $TEST 
    inside

答案 1 :(得分:0)

使用source命令而不使用反引号。只需写一行

source ~/perl5/perlbrew/etc/bashrc
在你的脚本中

。 (source有副作用,当你在子shell中时它不起作用。我甚至不确定你可以将source作为外部命令运行。)< / p>