/home/biol/perl5: 디렉토리입니다.

/home/biol/perl5: 디렉토리입니다.

다음 스크립트가 충돌합니다.

#!/bin/bash
#usage: sh oxford_pbs.sh ref.fa AA.fasta hybrid.gff3

cov=50
ide=100


for ((i=70;i<=${ide};i++));
do
  input=$(basename $(echo ${2} | sed 's|.gff3||g'))

  #cat <<EOF
  qsub <<EOF
#!/bin/bash -l

#PBS -N filter
#PBS -l walltime=20:00:00
#PBS -j oe
#PBS -l select=1:ncpus=1:mem=30G
#PBS -M [email protected]
##PBS -m bea

cd \$PBS_O_WORKDIR
module load bioperl/1.7.1-foss-2017a r/3.4.2-bioconductor-foss-2017a
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"

agat_sp_extract_sequences.pl --gff ${2}-ide${i}-cov${cov}-best-hit.gff3 -f ${1} -p -o ${2}-ide${i}-cov${cov}-best-hit.AA.fasta
EOF
done

다음 오류가 발생합니다.

/var/spool/PBS/mom_priv/jobs/8352088.pbs.SC: line 24: /home/biol/perl5: Is a directory
/var/spool/PBS/mom_priv/jobs/8352088.pbs.SC: line 27: agat_sp_extract_sequences.pl: command not found

그러나 다음 두 명령은 명령줄에서 문제 없이 실행됩니다.

> module load bioperl/1.7.1-foss-2017a r/3.4.2-bioconductor-foss-2017a
> eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
> 
> agat_sp_extract_sequences.pl --help

 ------------------------------------------------------------------------------
|   Another GFF Analysis Toolkit (AGAT) - Version: v0.1.0                      |
|   https://github.com/NBISweden/AGAT                                          |
|   National Bioinformatics Infrastructure Sweden (NBIS) - www.nbis.se         |
 ------------------------------------------------------------------------------

Perl 스크립트가 Bash 스크립트 내에서 실행되지 않는 이유는 무엇입니까?

미리 감사드립니다

답변1

문제는 확장을 위한 것이 아니라 $(perl ...)이미 수행했기 때문에 명령 대체가 즉시 수행된다는 것입니다 .qsub <<EOFqsub <<'EOF'${i}

Perl은 공백을 포함할 수 있는 행을 출력합니다.

PERL_MB_OPT="--install_base \"/home/user/perl5\""

그러나 최종 스크립트 실행 시 이를 평가하면 다음과 같습니다.

PERL_MB_OPT=--install_base "/home/user/perl5"

/home/user/perl5디렉토리에 대한 오류가 발생합니다. 가장 간단한 해결책은 Perl을 나중에 연기하는 것입니다.

eval "\$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"

관련 정보