2010-03-14 2 views
1

У меня есть скрипт ksh, который вызывает программу Perl. Программа Perl создает важные данные, к которым должен действовать скрипт ksh. Пример:Как вернуть переменную Perl в сценарий 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; 
+0

Что такое «МПГ»? – Svante

+0

Аббревиатура от 'program'. – 2010-03-15 02:49:55

+0

Stackoverflow не является твиттером или текстовыми сообщениями, поэтому вы можете писать слова. Будьте добры к поиску Google. :) –

ответ

0

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

#perl script 
print someFunction(); 

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

. .ksh делает вещи до и после вызова perl, а также записывает журнал (см. Следующий ответ), поэтому это не сработает. Но хорошая мысль. – 2010-03-14 20:45:19

0

Программа 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

Похоже, у вас есть TWO perl pgms в вашем решении? abc.pl во второй строке и «perlprogram» в третьей строке. – 2010-03-14 20:51:05

0

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

+0

Да, это похоже на то, как идти, за то, что я делаю, так как есть другие недостатки для других четырех предложений, которые я вижу по этому поводу. – 2010-03-14 20:42:06

0

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

например, exit(3) приведет к тому, что Perl вернет значение 3 в ksh.

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

+1

Нет, не числовое, плюс perl pgm может вернуть истинный код ошибки. – 2010-03-14 20:40:03

1

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

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

perlprogram > saved.output 

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

perlprogram | otherprogram 

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

envvariable=$(perlprogram) 

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

envvariable=`perlprogram` 
Смежные вопросы