linux shell执行perl脚本,无法在Shell脚本中运行Perl脚本

我正在尝试从* .csh脚本中运行perl脚本,但是出现以下错误:

Can't open perl script"checkLength.perl": No such file or directory

我认为这与perl脚本的路径有关。 当不在shell脚本中调用perl脚本时,我可以很好地运行它,但是当我在cshell脚本中调用它时,不会运行perl脚本。

我用于perl脚本的shebang是:#!/ usr / bin / perl。 我检查了一下,并且perl位于那里(不在/ usr / bin / env perl中)。 我确保它是可执行的。

我是否需要编辑$ PATH才能使其正常工作? 我很困惑,因为如果我运行一个perl脚本而不在另一个csh脚本中调用它,那它就运行得很好。

调用脚本时,请检查当前的工作目录。

checkLength.perl相对于.csh脚本的路径是什么?

嗯,我不 我怎么会发现呢?

嗯,我在调用脚本之前检查了工作目录,并在perl脚本实际所在的位置之前的一个目录中搜索了perl脚本。 如果我将perl脚本的路径编辑为实际路径,那应该可以解决此问题,对吗?

是的,就这样,假设您发现了有关pwd的信息。 Perlscripts通常具有后缀.pl。

是的,我从前就知道pwd,只是从没想过要在perl脚本运行之前就使用它,只是要检查Im是否在正确的目录中。 非常感谢队友!

@nlu:请编写解决方案,以便OP可以接受

当然,针对您的问题的一个明显解决方案是仅使用脚本的完整路径。但这通常不是可取的,因为脚本会在无法完全反映原始结构的安装上制动。

因此,有两种可能性:

您可以将perl脚本放入PATH变量中包含的定义明确的位置,以便在各自用户环境下运行的任何程序都可以找到它。

或者,相对于调用脚本的位置,您有一些定义明确的位置。假设您的bash脚本位于somedir中,而perl脚本位于somedir / subdir中,那么您的调用将是subdir / perlscript.pl。然后,要独立于调用者工作目录中的可能更改,您可以确定bash脚本启动时要调用的perl脚本的当前完整路径。

一个模板是:

#!/bin/bash

FULLPATH=$(pwd)/subdir/somescript.pl

# do something else, cd ...

$FULLPATH

我假设您的Perl脚本相对于bash脚本保持在固定路径中。假设您的目录结构如下所示:

(BASEDIR)/bin/example.sh

(BASEDIR)/perl/example.pl

为了允许您从系统中的任何位置运行bash脚本,必须通过获取BASEDIR来指定Perl脚本的相对路径。

#!/bin/bash

BASEDIR=$(dirname $0)

perl $BASEDIR/../perl/example.pl

上面我们正在做的是找到您调用的bash脚本(BASEDIR / bin)的位置,然后使用bash脚本的位置作为参考来找到Perl脚本的相对位置。现在,您将可以在任何地方调用bash脚本并正常运行Perl脚本。

你可能感兴趣的:(linux,shell执行perl脚本)