Как перенести мои переменные из скрипта Bash в Perl?

У меня есть переменные в bash-скрипте, которые мне нужно перенести в perl-скрипт. У меня есть переменные $ gal и $ obsid, объявленные в скрипте bash, а затем я вызываю новую программу.

gal=UCLA121
obsid=1896
./my_program

В начале сценария Perl загружается изображение с фразой

$ph_im =  "./$gal/img/${obsid}.img";

Но переменные равны NULL в новой программе.

6
задан 22 June 2018 в 23:20

3 ответа

Сделать переменные доступными для дочернего процесса в сценарии оболочки можно либо путем экспорта переменных

export foo=bar

, либо путем вызова программы с добавленными переменными

foo=bar ./my_prog.pl

В любом случае вам понадобится вызвать ENV на них внутри сценария perl

my $barfoo = $ENV{'foo'};
19
ответ дан 22 June 2018 в 23:20

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

Имеется переключатель -s :

$ cat vars.pl
#!perl
use feature 'say';
say "foo=$foo";
say "bar=$bar";

$ echo "$foo,$bar"
123,456

$ perl -s ./vars.pl -foo="$foo" -bar="$bar"
foo=123
bar=456
10
ответ дан 22 June 2018 в 23:20

Если Вы называете его как

./myscript.pl 1 35

Можно использовать @ARGV. Например.

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper qw(Dumper);

print "ARGV[0]=$ARGV[0]";
print "ARGV[1]=$ARGV[1]";

print Dumper \@ARGV;

Источник в качестве примера.

Это - старый пример, таким образом, он не может использовать последний стиль. Мне не настраивали компилятор жемчуга в данный момент, таким образом, я не могу протестировать вывод.

Можно использовать Data::Dumper помочь Вам отладить вещи.

Если Вы называете его как

perl -s ./myprogram -$gal="$gal" -$obsid="$obsid" 1 35

Поймите, что можно стать странными смешивание результатов @ARGV и названные параметры. Вы могли бы хотеть измениться, как Вы называете его к чему-то как

perl -s ./myprogram $gal $obsid 1 35

или

perl -s ./myprogram -gal="$gal" -obsid="$obsid" -first="1" -second="35"

Обратите внимание также, что именованные параметры -gal, нет -$gal. Я не совсем уверен что $ сделал бы там, но это будет иметь тенденцию делать что-то другое, чем, что происходит без него.

Помните, Data::Dumper может помочь Вам отладить вещи, если Вы получаете запутывающие результаты.

4
ответ дан 22 June 2018 в 23:20

Другие вопросы по тегам:

Похожие вопросы: