无法将参数从shell脚本传递到Perl脚本

时间:2017-03-16 18:29:04

标签: linux bash perl shell

我有下一个shell脚本,我将其命名为run.sh

#!/usr/bin/perl -w
#!/bin/sh

BROL="/sc01a4/users/user/brol"
PID=$$

while read line
do
  echo "$line" >> $BROL/rolak/1_EUSLEM_MATE/Sarrera_Testua_$PID.xml
done < "${1:-/proc/${$}/fd/0}"

perl $BROL/rolak/NAGUSIA.pl $BROL $PID

此脚本使用两个参数运行NAGUSIA.pl,路径为BROL,进程ID为变量PID

#!/usr/bin/perl -w

use strict;
use warnings;

my $direktorioa = "$ARGV[0]";
my $prozesua = "$ARGV[1]";

use lib "$direktorioa/rolak/lib";
use SRL::NAGUSIA qw(Egokitu_Sarrera Predikatu_Identifikazioa Predikatu_Desanbiguazioa Argumentuak_Identifikatu Argumentuak_Sailkatu Sortu_Irteera);

Egokitu_Sarrera($prozesua, $direktorioa);
Predikatu_Identifikazioa($prozesua, $direktorioa);
Predikatu_Desanbiguazioa($prozesua, $direktorioa);
Argumentuak_Identifikatu($prozesua, $direktorioa);
Argumentuak_Sailkatu($prozesua, $direktorioa);
Sortu_Irteera($prozesua, $direktorioa);

Perl脚本假设有两个接收这两个参数,但命令行会给出下一个错误:

Use of uninitialized value $direktorioa in concatenation (.) or string at /sc01a4/users/user/brol/rolak/NAGUSIA.pl line 9.

我使用下一个命令来运行shell脚本:

cat brol/proba_fitxategiak/proba4.txt | sh brol/EHU-eustagger/run.sh | sh brol/rolak/run.sh

我使用的是Linux,而不是Windows。为什么Perl脚本不接收shell脚本传递的参数?

1 个答案:

答案 0 :(得分:5)

use语句在编译时执行,所以

use lib "$direktorioa/rolak/lib";

之前执行
my $direktorioa = "$ARGV[0]";

替换

use lib "$direktorioa/rolak/lib";

use lib "$ARGV[0]/rolak/lib";

那就是说,无论如何你应该使用以下内容:

use FindBin qw( $RealBin );
use lib "$RealBin/lib";