次のスクリプトがクラッシュします。
#!/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
ただし、次の2つのコマンドはコマンドラインで問題なく実行されます。
> 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 <<EOF
qsub <<'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)"