无法从Shell脚本中运行Perl脚本

时间:2015-01-25 20:54:47

标签: perl shell csh

我正在尝试从* .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脚本中调用它,它运行得很好。

2 个答案:

答案 0 :(得分:1)

当然,对您的问题的一个明显的解决方案是简单地使用脚本的完整路径。但这通常不是优选的,因为脚本会在不完全镜像原始结构的安装上制动。

所以有两种可能性: 您可以将perl脚本放入PATH变量中包含的定义良好的位置,以便在相应用户环境下运行的任何程序都能找到它。

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

这个模板将是:

#!/bin/bash
FULLPATH=$(pwd)/subdir/somescript.pl

# do something else, cd ...

$FULLPATH

答案 1 :(得分:0)

我假设您的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脚本。