
それで、ただ質問をしました。forループリスト
今はうまく機能し、必要なものを出力します。これで、リストの各変数に対して呼び出す必要があるmakefileに次のようにリンクしたいと思います。
#!/bin/bash
mylist=(
'$(call list_samples,AON_9,NT_1,SC_17)'
'$(call list_samples,AON_10,NT_2,SC_18)'
'$(call list_samples,AON_11,NT_3,SC_19)'
'$(call list_samples,AON_12,NT_4,SC_20)'
'$(call list_samples,AON_13,NT_5,SC_21)'
'$(call list_samples,AON_14,NT_6,SC_22)'
'$(call list_samples,AON_15,NT_7,SC_23)'
'$(call list_samples,AON_16,NT_8,SC_24)'
)
for SAMPLES_out in "${mylist[@]}";
do
make -f make_gene_read_count.mk -n SAMPLES_OUT=\'${SAMPLES_out}\'
done
これによりエラーが発生します。make_gene_read_count.mk:5: *** unterminated call to function `call': missing `)'. Stop.
Bashスクリプトの呼び出しの前にechoを置くと、次のように印刷されます。
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_9,NT_1,SC_17)'
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_10,NT_2,SC_18)'
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_11,NT_3,SC_19)'
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_12,NT_4,SC_20)'
これらのエコーの1つをコマンドラインに追加すると、makefileが正しく機能します。私は何を見逃していますか?
生成されたファイルは次のとおりです。
IN_DIR = /data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/namesorted_bams
list_samples = $(shell ls $(IN_DIR)/*$(1)* $(IN_DIR)/*$(2)* $(IN_DIR)/*$(3)* | sed 's/\.namesorted\.bam/\.gene\.read\.count/g')
#SAMPLES_OUT := $(call list_samples,AON_9,NT_1,SC_17)
all: $(SAMPLES_OUT)
GFF := /data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/GFF/H3K4me1.gff
GFF_TEMP := $(GFF).temp.gff
$(GFF_TEMP): $(GFF)
sed 's/\*/./g' $< > $@
%.gene.read.count: %.namesorted.bam $(GFF_TEMP)
htseq-count -t exon -m intersection-strict -f bam -r name -s no $^ > $@
また、makefileに2つの変数を渡そうとしましたが、bashスクリプトリストでこれを行うと機能しないようです。
'$(call list_samples,AON_9,NT_1,SC_17) GFF=/data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/GFF/H3K4me1.gff'
私が受け取ったエラーは次のとおりです。
qmake: *** No rule to make target `GFF=/data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/GFF/H3K4me1.gff', needed by `all'. Stop.
答え1
一重引用符をメイクファイルに伝播したくありません。引用しないで二重引用符で置き換えてください。これにより、変数の値がシェル内の1つの単語として保持されます。
make -f make_gene_read_count.mk -n SAMPLES_OUT="$SAMPLES_out"
より多くの変数を渡すには、引用符なしのスペースで区切ります。
make VAR1="some value containing $val" VAR2='some other value'
# ^