我有一条BASH
管道,它在某个时刻运行一个具有奇点执行的Singularity
容器,如下所示:
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>
由于我使用数组同时运行多个实验,因此我正在使用希望添加到的环境变量重新定义实验<output_file_suffix>
;它适用于管道的所有步骤,但Singularity
似乎无法看到我在脚本中定义的变量......
有人能提供一些建议吗?我查了一下,但--env
似乎行不通。提前谢谢!
Singularity 的核心在于它在容器内运行软件。容器与其主机隔离,因此它在任何地方都能正常工作。容器的行为不依赖于主机上安装的软件、主机上可用的文件或主机上的环境变量。
传递到可使主机上的特定目录在容器内可访问。类似地,使用可使环境变量在容器内可访问。操作略有不同,因为值不必与主机相同。要使环境变量的值与主机相同,在从 Shell 脚本调用 singularity 时,请使用。请注意值周围的双引号,否则,如果值包含空格或其他特殊字符,它将不起作用。
--bind HOST_PATH:CONTAINER_PATH
singularity exec
--env NAME=VALUE
--env FOO="$FOO"
Singularity 命令行的文档比较少。Singularity 封装了 Docker,有时你可以在其文档中找到更多信息,例如
singularity exec --env
类似于docker run --env
,Docker 文档提供了更多信息。但需要注意的是,Singularity 并非直接封装 Docker,因此并非所有 Docker 选项都以相同的方式存在或运行。