2012-06-06 66 views
1

我安装我的一些代码,使用perlbrew需要的Perl 5.010一个CentOS 5.x的服务器上使用源,它需要两线在bash脚本

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 
+5

你的问题是? –

+0

语法说明:由于变量赋值和命令替换之间有空白,因此赋值不起作用。 –

回答

0

使用source命令,无反引号。只需在您的脚本中写一行

source ~/perl5/perlbrew/etc/bashrc 

。 (source有副作用,当你在一个子shell中不起作用,我甚至不知道你可以运行source作为外部命令)。

+0

我建议删除最后一段并将其添加为注释。这不是答案的一部分。也许其他SOers /访问不需要关于如何提问的讲座,即使我完全同意,upvoting David的评论也会起作用。 – KurzedMetal

+0

@KurzedMetal:你说的对,我想。 –

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 
+0

为什么我不能按回车键并让它在评论表单中插入换行符? Chrome/Ubuntu12.04 ??这并不酷。 – user1439590

+0

@ user1439590因为,AFAIK,我们不能做多行评论。 – KurzedMetal