Ponto e vírgula ausente após atribuição a k , k=...
No seu primeiro terminal, você provavelmente fez alguns testes antes, como:
k='echo blah_RG.bam | sed "s/.bam/_Reordered.bam/"'
echo $k
Agora, k
está definido no seu shell.
Quando você expandi-lo para incluir o processamento Java, o arquivo de saída será aquele $k
.
Então você abre um novo Terminal. Aqui $k
não está definido. Então você tenta executar o mesmo comando, mas, como $k
não está configurado, o programa Java reclama do arquivo de saída não encontrado. O= "$k"
seria O= ""
Isso também corresponde às mensagens de erro que mencionam vários ...Writer
e FileOutput...
em oposição a ...Reader
e > FileInput...
. Simplesmente não é possível abrir um arquivo sem / nome vazio.
Quanto à comparação de printenv
ou env
, observe que esse comando não inclui variáveis do shell. Dê uma olhada em, e. (set -o posix; set)
Amostra simples:
$ touch 1.foo 2.foo 3.foo
$ for i in *.foo; do k="$(echo $i | sed 's/.foo/.bar/')"; done
# Now k is set to last *.foo
$ for i in *.foo; do k="$(echo $i | sed 's/.foo/.bar/')" printf "i=%s k=%s\n" "$i" "$k"; done
i=1.foo k=3.bar
i=2.foo k=3.bar
i=3.foo k=3.bar
Em seguida, tente com ;
após a atribuição a $k
:
$ for i in *.foo; do k="$(echo $i | sed 's/.foo/.bar/')"; printf "i=%s k=%s\n" "$i" "$k"; done
i=1.foo k=1.bar
i=2.foo k=2.bar
i=3.foo k=3.bar
Você pode alterá-lo para algo como:
for fn in *_RG.bam
do
printf "Processing: %s\n" "$fn"
java -jar /home/Programas/picard-tools-1.107/ReorderSam.jar \
R=/local/Referencias/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/genome.fa \
I="$fn" O="${fn%.bam}_Reordered.bam"
done
Nota: aqui como multi-linha e com o uso de substituição de bash:
${fn%.bam}_Reordered.bam
| | | |
| | | +--------- Append _Reordered.bam
| | +-------------- Remove .bam
| +----------------- Remove substring from end
+------------------- Variable name