qsub:如何将参数传递给在 shell 脚本中调用的 perl 脚本
qsub: how to pass argument to perl script called within a shell script
这是 cwd 中的内容:
blastn_build.sh qscript
它们目前都设置为可执行文件(但不是二进制文件)
以下是blastn_build.sh的内容:
#!/bin/bash
update_blastdb.pl --showall
以下是qscript的内容:
qsub -S /bin/bash -V -b n -N nt_wgs_build -pe smp 8 -j y -o ./nt_wgs_build.sge -l h=n10 -cwd -sync y "./blastn_build.sh"
update_blastdb.pl 在我的路径中并以 #!/usr/bin/perl
开头
现在的问题:
运行 ./blastn_build.sh 按预期工作。
运行 ./qscript 没有...这是错误消息:
Failed to connect to ftp.ncbi.nlm.nih.gov: Invalid argument
如果我从 ./blastn_build.sh 中删除 --showall 参数,那么 ./blastn_build.sh 和 ./qscript 都会按预期工作。问题似乎在于如何通过 qsub 将 --showall 选项正确传递给 update_blastdb.pl。
如能帮助理解和修复,我们将不胜感激!
update_blastdb.pl (blast-2.2.31 http://www.ncbi.nlm.nih.gov/books/NBK52640/)
wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/LATEST/ncbi-blast-2.2.31+-x64-linux.tar.gz
#!/usr/bin/perl
# $Id: update_blastdb.pl 446090 2014-09-11 12:12:27Z ivanov $
===========================================================================
#
# Author: Christiam Camacho
#
# File Description:
# Script to download the pre-formatted BLAST databases from the NCBI ftp
# server.
#
#
use strict;
use warnings;
use Net::FTP;
use Getopt::Long;
use Pod::Usage;
use File::stat;
use Digest::MD5;
use Archive::Tar;
use List::MoreUtils qw(uniq);
use constant NCBI_FTP => "ftp.ncbi.nlm.nih.gov";
use constant BLAST_DB_DIR => "/blast/db";
use constant USER => "anonymous";
use constant PASSWORD => "anonymous";
use constant DEBUG => 0;
use constant MAX_DOWNLOAD_ATTEMPTS => 3;
use constant EXIT_FAILURE => 2;
# Process command line options
my $opt_verbose = 1;
my $opt_quiet = 0;
my $opt_force_download = 0;
my $opt_help = 0;
my $opt_passive = 0;
my $opt_timeout = 120;
my $opt_showall = 0;
my $opt_show_version = 0;
my $opt_decompress = 0;
my $result = GetOptions("verbose+" => $opt_verbose,
"quiet" => $opt_quiet,
"force" => $opt_force_download,
"passive" => $opt_passive,
"timeout=i" => $opt_timeout,
"showall" => $opt_showall,
"version" => $opt_show_version,
"decompress" => $opt_decompress,
"help" => $opt_help);
$opt_verbose = 0 if $opt_quiet;
die "Failed to parse command line options\n" unless $result;
pod2usage({-exitval => 0, -verbose => 2}) if $opt_help;
pod2usage({-exitval => 0, -verbose => 2}) unless (scalar @ARGV or
$opt_showall or
$opt_show_version);
#rest of code continues...
perl v 5.10.1
看起来您实际上是在某个集群环境中工作(或者 qsub 是什么?)。在这样的地方,你的 qsubed 脚本实际上运行在不同的节点上,这些节点可以没有互联网连接,可以从不同的目录开始执行你的脚本,或者可以有许多来自旅游原始主机的其他错误配置...
这是 cwd 中的内容:
blastn_build.sh qscript
它们目前都设置为可执行文件(但不是二进制文件)
以下是blastn_build.sh的内容:
#!/bin/bash
update_blastdb.pl --showall
以下是qscript的内容:
qsub -S /bin/bash -V -b n -N nt_wgs_build -pe smp 8 -j y -o ./nt_wgs_build.sge -l h=n10 -cwd -sync y "./blastn_build.sh"
update_blastdb.pl 在我的路径中并以 #!/usr/bin/perl
开头现在的问题:
运行 ./blastn_build.sh 按预期工作。 运行 ./qscript 没有...这是错误消息:
Failed to connect to ftp.ncbi.nlm.nih.gov: Invalid argument
如果我从 ./blastn_build.sh 中删除 --showall 参数,那么 ./blastn_build.sh 和 ./qscript 都会按预期工作。问题似乎在于如何通过 qsub 将 --showall 选项正确传递给 update_blastdb.pl。
如能帮助理解和修复,我们将不胜感激!
update_blastdb.pl (blast-2.2.31 http://www.ncbi.nlm.nih.gov/books/NBK52640/) wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/LATEST/ncbi-blast-2.2.31+-x64-linux.tar.gz
#!/usr/bin/perl
# $Id: update_blastdb.pl 446090 2014-09-11 12:12:27Z ivanov $
===========================================================================
#
# Author: Christiam Camacho
#
# File Description:
# Script to download the pre-formatted BLAST databases from the NCBI ftp
# server.
#
#
use strict;
use warnings;
use Net::FTP;
use Getopt::Long;
use Pod::Usage;
use File::stat;
use Digest::MD5;
use Archive::Tar;
use List::MoreUtils qw(uniq);
use constant NCBI_FTP => "ftp.ncbi.nlm.nih.gov";
use constant BLAST_DB_DIR => "/blast/db";
use constant USER => "anonymous";
use constant PASSWORD => "anonymous";
use constant DEBUG => 0;
use constant MAX_DOWNLOAD_ATTEMPTS => 3;
use constant EXIT_FAILURE => 2;
# Process command line options
my $opt_verbose = 1;
my $opt_quiet = 0;
my $opt_force_download = 0;
my $opt_help = 0;
my $opt_passive = 0;
my $opt_timeout = 120;
my $opt_showall = 0;
my $opt_show_version = 0;
my $opt_decompress = 0;
my $result = GetOptions("verbose+" => $opt_verbose,
"quiet" => $opt_quiet,
"force" => $opt_force_download,
"passive" => $opt_passive,
"timeout=i" => $opt_timeout,
"showall" => $opt_showall,
"version" => $opt_show_version,
"decompress" => $opt_decompress,
"help" => $opt_help);
$opt_verbose = 0 if $opt_quiet;
die "Failed to parse command line options\n" unless $result;
pod2usage({-exitval => 0, -verbose => 2}) if $opt_help;
pod2usage({-exitval => 0, -verbose => 2}) unless (scalar @ARGV or
$opt_showall or
$opt_show_version);
#rest of code continues...
perl v 5.10.1
看起来您实际上是在某个集群环境中工作(或者 qsub 是什么?)。在这样的地方,你的 qsubed 脚本实际上运行在不同的节点上,这些节点可以没有互联网连接,可以从不同的目录开始执行你的脚本,或者可以有许多来自旅游原始主机的其他错误配置...