2017-03-08 3 views
1

プログラムを実行するために使用するいくつかのパラメータを記録するbash_profileに関数を書きたいと思います。問題は、私は変数にパラメータを格納すると、私は私のプログラムを呼び出すときにエラーが発生します。この文句を言わないながらbashプログラムを呼び出すときに変数に変数を格納していない

Command line argument error: Argument "query". File is not accessible: `~/path/to/file/abc' 

:テストのためのUbuntu 16.04 LTSにbash test.shを呼び出すことによって実行さ

#!/bin/bash 

/home/xyz/blastn -db ~/Desktop/search_for_TDS/claClusterSeq -query ~/path/to/file/abc -out ~/Desktop/hallo_blast123 

回とも

#!/bin/bash 

para="-db ~/Desktop/search_for_TDS/claClusterSeq -query ~/path/to/file/abc -out ~/Desktop/hallo_blast123" 

/home/xyz/blastn $para 

これはエラーを生成します。

-out $PWD/"$1"_"$4"_ws_"$3"_eval_"$5"_Result_"$DATE"_table

I:

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 
} 

私のテストの最初のリードがによって引き起こされたことを示すエラー:ここでは

が、これは関心がある場合、私は私のbash_profileにしたい、実際の関数でありますblastnの出力パラメータで使用するためにスクリプトが呼び出された場所のディレクトリを使用したい

答えて

0

あなたの短いexamplからe、チルダはではありません。引用符付きの文字列で展開します。

あなたが代わりに単一の文字列にすべてのオプションを押しての配列変数を使用する:あなたは、出力ファイルはblastnプログラムと同じディレクトリになりたい場合は、

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 
} 

次の操作を行います。

#!/bin/bash 
blast_dir=$(dirname "$0") 
... 
blastv25table() { 
    ... 
     -out "$blast_dir/${1}_${4}_ws_${3}_eval_${5}_Result_${date}_table" 
+1

ありがとうございました。これは、これと少しのエラーがあって、 '-out'行が修正されました。 '' $ PWD/$ {{}} _ $ {4} _ws _ $ {3} _eval _ $ {5} _Result _ $ {date} _table ''ファイルをどこか遠くに供給すれば、パスを削除するbasenameコマンド – voiDnyx

関連する問題