Bash 不会在 Perl 脚本中执行系统命令

Bash 不会在 Perl 脚本中执行系统命令

需要 Bash 文件来运行 perl 脚本。


这是 Perl 文件。

#!/usr/bin/perl -w
use strict;


system "fastacmd -s $Q -d $NewQuery -o ./gifiles/$Q.$NewQuery.txt";

为了避免理解这个脚本时出现复杂情况,我省略了很多内容。在使用 bash 命令之前,脚本确实使用了定义的变量。


这是 Bash 脚本

#!/bin/bash

#$ -o $HOME/xREPLaunch_$JOB_ID.out

#$ -e $HOME/xREPLaunch_$JOB_ID.err

cd $HOME/Labwork/Dbfiles/results

#$ -cwd

perl xREPredoTop.pl

由于某种原因,我不断收到此错误

Can't exec "fastacmd": No such file or directory at xREPredoTop.pl line 78, <IN> line 1.

真的很困惑为什么这不起作用。

答案1

我能想到的两种可能性:

通常的情况是,您正在从 cron 之类的东西运行 bash 脚本,其中您的用户配置文件脚本尚未运行并设置 $PATH。在这种情况下,您可以指定

system "/path/to/fastacmd ...

在 perl 脚本中,以便它不依赖于路径,或者您可以设置

$ENV{PATH}= "/my/custom/paths:$ENV{PATH}";

在 perl 脚本内,或者您可以通过加载配置文件脚本来修复 bash 脚本中的路径:

source /etc/profile;
source ~/.profile;
source ~/.bash_profile;

但另一种可能性是#!/usr/bin/perl您的脚本中声明的 perl 与您的 PATH 中声明的 perl 不同。你可以通过说来检查这一点

which perl

例如,如果你说它./xREPredoTop.pl变成

/usr/bin/perl -w ./xREPredoTop.pl

但如果你说它perl ./xREPredoTop.pl可能会变成

/usr/local/bin/perl ./xREPredoTop.pl

并且可以通过某种方式进行不同的配置来改变路径。

相关内容