BashはPerlスクリプトからシステムコマンドを実行しません。

BashはPerlスクリプトからシステムコマンドを実行しません。

Perl スクリプトを実行するには Bash ファイルが必要です。


これは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

私が考えることができる2つの可能性は次のとおりです。

通常起こるのは、ユーザープロファイルスクリプトがまだ実行されておらず、$ PATHが設定されているcronと同じ場所でbashスクリプトを実行することです。この場合、指定できます。

system "/path/to/fastacmd ...

パスに依存しないようにPerlスクリプトで設定または設定できます。

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

Perlスクリプト内またはプロファイルスクリプトをロードしてbashスクリプトのパスを変更できます。

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

しかし、もう1つの可能性は、#!/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

そして、パスを変更するために何らかの方法で異なる方法で設定することも可能です。

関連情報