Почему мой Perl-скрипт требует экспортировать путь пакетов в @INC для удаленного запуска через ssh - PullRequest
0 голосов
/ 21 февраля 2011

Серверный сценарий perl с необходимыми пакетами работает локально пользователем "my_user".

Но если я запускаю скрипт удаленно (ssh), мне нужно export PERL5LIB=/usr/local/share/perl/5.10.0/my_modules перед вызовом скрипта perl, чтобы он заработал.

Почему это и как я могу обернуть это, чтобы избежать экспорта PERLIB каждый раз, когда мне нужно вызвать удаленный Perl-скрипт?

РАБОТАЕТ :

ssh my_user@remote_server "export PERL5LIB=/usr/local/share/perl/5.10.0/my_modules; /cgi-bin/my_perl_script.pl --option1 foo --option2 '*';"  

НЕ РАБОТАЕТ :

ssh my_user@remote_server "/cgi-bin/my_perl_script.pl --option1 foo --option2 '*';"  

возвращает: Не удается найти my_package1.pm в @ INC

Это может быть скорее вопрос ssh, чем строгий вопрос perl: почему удаленный пользователь, выполняющий скрипт perl, не наследует свои локальные данные ENV.

Thx

1 Ответ

1 голос
/ 22 февраля 2011

Как подсказывает @mu_is_too_short (нет трения, это тоже хорошо), и ссылаясь на более подробное объяснение здесь , существуют различные типы оболочек: «оболочка выполнения команды SSH неинтерактивна shell, тогда как ваша обычная оболочка является либо оболочкой входа в систему, либо интерактивной оболочкой ".

Таким образом, решение - это то, что я сделал специально (например, добавив "export PERL5LIB" перед запуском сценария), или, лучше, поставьте всю среду от удаленного пользователя для запуска удаленной оболочки с ожидаемой поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...