Sourcing shell-скрипты на Perl - PullRequest
       0

Sourcing shell-скрипты на Perl

2 голосов
/ 19 февраля 2011

Я хочу получить скрипт оболочки из Perl и сделать так, чтобы переменные окружения были доступны в Perl, но я не уверен, есть ли элегантный способ сделать это.Очевидно, что использование system() не будет работать, так как оно выполняется в разветвленном процессе, и все изменения среды будут потеряны.Я думаю, что есть модуль CPAN, который может это сделать, но я предпочитаю не использовать внешние модули.

Я видел два решения, которые не будут работать в моем случае:

  1. Иметь оболочку, которая вызывает скрипт оболочки, а затем вызывает скрипт Perl.Я не знаю заранее, какой из моих сценариев оболочки мне нужно вызвать.

  2. Открытие сценария оболочки вручную и очистка пар arg=value.Это также не будет работать, потому что сценарий оболочки не является простым списком ARG=VALUE, а скорее содержит набор условий, а переменные могут иметь разные значения в зависимости от определенных условий.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2011

sh -c "source script; env" должен выводить среду в конце скрипта в виде пар имя = значение, которые затем можно проанализировать из вашего скрипта perl (так как Perl - это язык, предназначенный для синтаксического анализа, это должно быть легко).

1 голос
/ 10 июля 2013

Вы можете сделать это, установив внешний модуль из CPAN, который является Shell :: Source

$env_path= Shell::Source->new(shell=>"tcsh",file=>"../path/to/file/temp.csh");
$env_path->inherit;

Поскольку perl создает свой собственный экземпляр во время работы на оболочке, мы не можем установить путь к среде для основной оболочки, так как экземпляр perl будет похож на вложенную оболочку основной оболочки. Ребенок не может задавать пути окружения для родителей.

Теперь, пока не будет запущена вложенная оболочка perl, вы сможете получить доступ ко всем путям, присутствующим в temp.csh, используя Shell :: Source

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