Используя источник в скрипте bash

Я установил часть своего кода, которому нужен Perl 5.010, на сервер CentOS 5.x, используя perlbrew, и ему нужны две строки

source ~/perl5/perlbrew/etc/bashrc

а также

perlbrew switch perl-5.10.1

Быть выполненным в оболочке до того, как в моем / usr / bin / env появится perl 5.010, поэтому я попытался создать следующий исполняемый скрипт 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 ответа

Процесс не может изменить свою родительскую среду, так что вы делаете это неправильно, начиная с Шебанга.

Создание источника в обратном токе (подоболочке) влияет только на подоболочку и заканчивается после выполнения команды.

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

Что вы, вероятно, хотите сделать, это источник вашего setEnv.sh Сценарий прямо из вашей оболочки.

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

Использовать source Команда без галочек. Просто напишите строку

source ~/perl5/perlbrew/etc/bashrc

в вашем сценарии. (source имеет побочные эффекты, которые не работают, когда вы находитесь в под-оболочке. Я даже не уверен, что ты можешь бежать source как внешняя команда.)

Другие вопросы по тегам