You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中访问Snakemake工作目录变量?

在Bash脚本中获取Snakemake的workflow.basedir路径

Snakemake不会自动将Python侧的workflow.basedir暴露为Bash环境变量,但有两种可靠方式获取该路径:

方法1:从Snakefile主动传递变量(推荐)

这是最稳定的方式,直接在规则中把workflow.basedir通过环境变量或命令行参数传给Bash脚本:

通过环境变量传递

在Snakefile的规则里定义:

rule run_my_script:
    shell:
        "export SNK_BASEDIR={workflow.basedir} && ./my_script.sh"

然后在你的Bash脚本my_script.sh中直接使用:

#!/bin/bash
echo "Snakemake工作目录:$SNK_BASEDIR"

通过命令行参数传递

在Snakefile中:

rule run_my_script:
    shell:
        "./my_script.sh {workflow.basedir}"

在Bash脚本中通过位置参数接收:

#!/bin/bash
SNK_BASEDIR="$1"
echo "Snakemake工作目录:$SNK_BASEDIR"

方法2:在Bash脚本中推导路径

如果无法修改Snakefile,可以通过Snakemake的运行上下文推导workflow.basedir(即Snakefile所在的目录):

#!/bin/bash
# 提取Snakemake进程指定的Snakefile路径
SNAKEFILE=$(ps aux | grep -v grep | grep snakemake | awk '{for(i=1;i<=NF;i++) if ($i ~ /--snakefile|-s/) print $(i+1)}')
# 若未指定-s参数,默认用当前目录下的Snakefile
if [ -z "$SNAKEFILE" ]; then
    SNAKEFILE="./Snakefile"
fi
# 提取Snakefile所在目录,即workflow.basedir
SNK_BASEDIR=$(dirname "$(realpath "$SNAKEFILE")")
echo "Snakemake工作目录:$SNK_BASEDIR"

注意:这种方式依赖进程查询,若运行多个Snakemake实例可能出现误判,仅推荐在单实例场景使用。

内容的提问来源于stack exchange,提问作者5kobrat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:16