web-dev-qa-db-fra.com

Comment puis-je transférer mes variables d'un script Bash dans un script Perl?

J'ai des variables dans un script bash qui doivent être transférées dans un script Perl. J'ai les variables $ gal et $ obsid déclarées dans le script bash, puis j'appelle le nouveau programme.

gal=UCLA121
obsid=1896
./my_program

Le début du script Perl charge une image avec la phrase

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

Mais les variables sont NULL dans le nouveau programme.

6
J. Doe

Rendre les variables disponibles pour le processus enfant dans un script Shell peut être fait soit en exportant des variables

export foo=bar

Ou en appelant programme avec des variables pré-ajoutées

foo=bar ./my_prog.pl

Dans les deux cas, vous devrez appeler ENV dans le script Perl.

my $barfoo = $ENV{'foo'};
19

Utiliser l'environnement est une manière plus propre.

Il y a le commutateur -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
glenn jackman

Si vous l'appelez comme

./myscript.pl 1 35

Vous pouvez utiliser @ARGV. Par exemple.

#!/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;

Exemple source .

Ceci est un ancien exemple, de sorte qu'il n'utilise peut-être pas le dernier style. Je n'ai pas de compilateur Perl configuré pour le moment, je ne peux donc pas tester la sortie.

Vous pouvez utiliser le Data::Dumper pour vous aider à déboguer des choses.

Si vous l'appelez comme

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

Réalisez que vous pourriez obtenir des résultats étranges en mélangeant @ARGV et des paramètres nommés. Vous voudrez peut-être changer la façon dont vous l'appelez en quelque chose comme

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

ou

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

Notez également que les paramètres nommés sont -gal, pas -$gal. Je ne suis pas tout à fait sûr de ce que le $ ferait là-bas, mais il aurait tendance à faire autre chose que ce qui se passe sans lui.

Rappelez-vous, Data::Dumper peut vous aider à déboguer des choses si vous obtenez des résultats confus.

4
Brythan