我想在我的bash_profile中编写一个函数来记录一些用于执行程序的参数。问题是,当我将参数存储在变量中时,当我调用程序时会出现错误。
#!/bin/bash
para="-db ~/Desktop/search_for_TDS/claClusterSeq -query ~/path/to/file/abc -out ~/Desktop/hallo_blast123"
/home/xyz/blastn $para这会产生一个错误:
Command line argument error: Argument "query". File is not accessible: `~/path/to/file/abc'虽然这样做是不行的:
#!/bin/bash
/home/xyz/blastn -db ~/Desktop/search_for_TDS/claClusterSeq -query ~/path/to/file/abc -out ~/Desktop/hallo_blast123两次都是在Ubuntu16.04LTS上调用bash test.sh进行测试。
如果感兴趣的话,下面是我想要的bash_profile中的实际函数:
blastv25table(){
if [[ ! $# = 5 ]]; then
echo "Param: query db wordSize task evalue"
else
#== Parameters ==
DATE=$(date -I)
para="-num_threads 8
-query $1
-db $2
-outfmt 6
-task $4
-word_size $3
-out $PWD/"$1"_"$4"_ws_"$3"_eval_"$5"_Result_"$DATE"_table
-evalue $5
"
#== Parameter logfile ==
log="./blast_param.log"
echo -e 'Timestamp\t: '$(date)'\nQuery file\t: '$1'\nDB file\t\t: '$2'\nParameters\t: '$para'\nBlastn\t\t: v2.5\n\n##---------------------------##\n' >> $log
#======= Start Blastn ======
/home/xyz/blastn $para
fi
}首先导致测试的错误是由以下原因引起的:
-out $PWD/"$1"_"$4"_ws_"$3"_eval_"$5"_Result_"$DATE"_table
其中,我希望使用调用脚本的目录,以便在blastn的输出参数中使用该目录。
发布于 2017-03-08 15:18:02
从您的简短示例来看,倾斜体不会在引用的字符串中展开。
您希望使用数组变量,而不是将所有选项推入单个字符串:
blastv25table() {
if [[ $# -ne 5 ]]; then
echo "Param: query db wordSize task evalue"
else
date=$(date -I)
para=(
-num_threads 8
-query "$1"
-db "$2"
-outfmt 6
-task "$4"
-word_size "$3"
-out "$PWD/${1}_${4}_ws_${3}_eval_${5}_Result_${date}_table"
-evalue "$5"
)
log="./blast_param.log"
printf 'Timestamp\t: %s\nQuery file\t: %s\nDB file\t\t: %s\nParameters\t: %s\nBlastn\t\t: v2.5\n\n##---------------------------##\n' \
"$(date)" "$1" "$2" "${para[*]}" >> $log
/home/xyz/blastn "${para[@]}"
fi
}如果希望输出文件与blastn程序位于同一个目录中,请执行以下操作:
#!/bin/bash
blast_dir=$(dirname "$0")
...
blastv25table() {
...
-out "$blast_dir/${1}_${4}_ws_${3}_eval_${5}_Result_${date}_table"https://stackoverflow.com/questions/42674928
复制相似问题