我已经在使用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
进程无法修改其父环境,因此自 shebang 以来您就做错了。
在反引号(子外壳)中执行源仅影响子外壳,并在命令执行后结束。
$ ### 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
使用不带反引号的 source
命令。只需写一行
source ~/perl5/perlbrew/etc/bashrc
在您的脚本中。(source
有副作用,当你在子外壳中时,这不起作用。我什至不确定您是否可以将source
作为外部命令运行。