我使用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
答案 0 :(得分:2)
进程无法修改其父环境,因此自从shebang以来你做错了。
在反引号(subshell)中执行源只影响子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>