Make não funciona quando invocado a partir de um script bash

0

Então, eu fiz uma pergunta: para fazer um loop em uma lista

Isso funciona perfeitamente agora e produz o que eu preciso. Agora eu quero vincular isso a um makefile que deve ser chamado por variável na minha lista assim:

#!/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

Isso me dá um erro: make_gene_read_count.mk:5: *** unterminated call to function 'call': missing ')'. Stop.

Enquanto eu coloco eco na frente da chamada para fazer no meu script, ele os imprime assim:

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)'

Se eu adicionar um desses ecos à linha de comando, o makefile funcionará perfeitamente. O que eu sinto falta?

Este é o 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 $^ > $@

Eu também estou tentando passar 2 variáveis para o meu makefile, mas isso não parece funcionar corretamente também se eu fizer isso na lista de scripts do 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'

Este é o erro que estou recebendo:

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.
    
por Sander Van der Zeeuw 13.02.2015 / 14:29

1 resposta

2

Você não quer que as aspas simples sejam propagadas para o makefile. Não os cite e substitua-os por aspas duplas - isso manteria o valor da variável como uma palavra no shell.

make -f make_gene_read_count.mk -n SAMPLES_OUT="$SAMPLES_out"

Se você deseja passar mais variáveis, separe-as por espaço em branco sem aspas:

make VAR1="some value containing $val" VAR2='some other value'
#                                     ^
    
por 13.02.2015 / 14:39