1

我已经使用 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
4

2 回答 2

2

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

在反引号(子shell)中执行源代码仅影响子shell,并在命令执行后结束。

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

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

    $ ### test.sh assign "inside" to TEST
    $ TEST='outside'; source test.sh; echo $TEST 
    inside
于 2012-06-06T12:07:51.143 回答
0

使用source不带反引号的命令。只写一行

source ~/perl5/perlbrew/etc/bashrc

在你的脚本中。(source有副作用,当您在子外壳中时不起作用。我什至不确定您是否可以source作为外部命令运行。)

于 2012-06-06T11:28:07.320 回答