Bash는 Perl 스크립트에서 시스템 명령을 실행하지 않습니다.

Bash는 Perl 스크립트에서 시스템 명령을 실행하지 않습니다.

Perl 스크립트를 실행하려면 Bash 파일이 필요합니다.


이것은 펄 파일입니다.

#!/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

내가 생각할 수 있는 두 가지 가능성은 다음과 같습니다.

일반적으로 발생하는 일은 사용자 프로필 스크립트가 아직 실행되지 않고 $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;

그러나 또 다른 가능성은 #!/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

그리고 경로를 변경하기 위해 어떤 방식으로든 다르게 구성하는 것도 가능합니다.

관련 정보