Tenho um BASH
pipeline que em determinado momento executa um Singularity
contêiner com singularity exec da seguinte maneira:
singularity exec --bind `pwd`:/folder --bind $d:/results <image>.sif <tool_command> -i /folder/<file>.fastq -v /results/<output>/<file>.vcf -r /folder/<reference>.fna -s <vcf_sample_name> -j 24 -t 24 -o /results/<output_file_suffix>
Como estou executando vários experimentos ao mesmo tempo com uma matriz, estou redefinindo os experimentos com uma variável de ambiente que desejo adicionar ao <output_file_suffix>
; funciona para todas as etapas do pipeline, mas Singularity
parece que não consegue ver a(s) variável(is) que estou definindo no meu script...
Alguém tem alguma dica de como fazer isso? Pesquisei um pouco, mas --env
parece que não está funcionando. Agradeço desde já!
O objetivo do Singularity é executar software dentro de um contêiner. O contêiner é isolado do seu host, de modo que funciona da mesma forma em todos os lugares. O comportamento do contêiner não depende de fatores como o software instalado no host, os arquivos disponíveis no host ou as variáveis de ambiente no host.
Use " to " para tornar um diretório específico do host acessível dentro do contêiner. De forma semelhante, use " para" para tornar uma variável de ambiente acessível dentro do contêiner. O processo é um pouco diferente, pois o valor não precisa ser o mesmo do host. Para atribuir a uma variável de ambiente o mesmo valor do host, ao invocar o singularity a partir de um script de shell, use " . Observe as aspas duplas ao redor do valor; caso contrário, não funcionará se o valor contiver espaços ou outros caracteres especiais .
--bind HOST_PATH:CONTAINER_PATH
singularity exec
--env NAME=VALUE
--env FOO="$FOO"
A documentação da linha de comando do Singularity é um pouco escassa. O Singularity envolve o Docker e, às vezes, você pode encontrar mais informações em sua documentação. Por exemplo,
singularity exec --env
é semelhante ao Dockerdocker run --env
e a documentação do Docker contém mais informações. Mas esteja ciente de que o Singularity não é um wrapper direto, portanto, nem todas as opções do Docker existem ou se comportam da mesma maneira.