Как вернуть переменную Perl в скрипт ksh? - PullRequest
1 голос
/ 14 марта 2010

У меня есть скрипт ksh, который вызывает программу на Perl. Программа Perl создает некоторые важные данные, с которыми должен работать сценарий ksh. Пример:

Моя программа ksh:

#!/usr/bin/ksh
abc.pl > $logFile
# perl pgm creates variable $importantData   See below.
#  HOW DO I GET THE .KSH SCRIPT TO SEE $importantData  ???
def.ksh $importantData  # send important data to another .ksh script
exit

Моя Perl-программа:

$importantData = somefunction();
exit;

Ответы [ 5 ]

1 голос
/ 15 марта 2010

В * nix системах дочерний процесс не может изменять среду своего родителя. Если вы спроектируете свой Perl-скрипт для печати важных данных для стандартизации, у вас будет несколько способов перехватить их для дальнейшей обработки.

Самое простое - перенаправить вывод в файл для последующей обработки:

perlprogram > saved.output

Если вам нужны данные только для одного процесса, и следующий процесс - это следующий процесс, вы можете направить вывод perl во вход другого процесса:

perlprogram | otherprogram

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

envvariable=$(perlprogram)

Или старая школа (в которой есть проблемы с цитированием сложных команд):

envvariable=`perlprogram`
0 голосов
/ 14 марта 2010

Если значение является числовым, вы можете вернуть его с помощью функции Perl exit(), которая будет отображаться как код состояния Perl.

Например, exit(3) заставит Perl вернуть значение 3 в ksh.

Насколько я понимаю, вы можете использовать специальную переменную $? ksh, чтобы прочитать состояние завершения последней команды. Подробнее см. здесь .

0 голосов
/ 14 марта 2010

Программа Perl должна печатать переменную. Сценарий KSH фиксирует вывод.

Perl ...

$importantData = somefunction();
print $importantData;
exit

КШ ...

#!/usr/bin/ksh
abc.pl > $logFile
importantData=$(perlprogram)
def.ksh $importantData  # send important data to another .ksh script
exit
0 голосов
/ 14 марта 2010

Если вы не можете использовать стандартный вывод или стандартную ошибку для предоставления $ ImportantData, вы можете использовать временный файл.

0 голосов
/ 14 марта 2010

Не могли бы вы заставить скрипт perl распечатать данные и затем передать данные в новый скрипт ksh

#perl script
print someFunction();

#ksh script
perl abc.pl | ksh scrip
...