Есть ли способ в Perl запускать несколько команд linux и хранить переменные окружения между ними? - PullRequest
2 голосов
/ 22 июня 2011

У меня есть скрипт на Perl, и я хочу сделать следующее:

system ("source myscript.sh");

myscript.sh экспортирует несколько envs, но они теряются после завершения работы системы, так что если я сейчас сделаю:

system ("echo $ SOME_VAR");

Сбой, потому что $ SOME_VAR был экспортирован myscript.sh и потерян при завершении системы.

Это простой пример, но в моем случае использования myscript.sh - сложный скрипт, и я хочу впоследствии выполнить от 10 до 20 системных команд, которые зависят от env vars из него.

Заранее благодарю за ответы.

Ответы [ 2 ]

4 голосов
/ 22 июня 2011

Предполагая, что myscript.sh ничего не печатает,

%new_env = ();
open SCRIPT_ENV, 'source myscript.sh; printenv|';
map {/(.*?)=(.*)/ and do {$new_env{$1} = $2}} <SCRIPT_ENV>;
close SCRIPT_ENV;
%ENV = %new_env;

Если скрипт myscript.sh напечатает что-то, вам придется сделать что-то более сложное.

0 голосов
/ 22 июня 2011

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

source myscript.sh
env

, а затем прочитайте вывод команды 'env' и установите окружение в вашей perl-программе.

Так что вам нужно запустить скрипт-обёртку так:

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