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