如何优化调用多R脚本的Bash脚本:简化参数输入
简化Bash脚本参数输入的方案
1. 创建参数配置文件
创建纯文本配置文件(比如workflow_config.conf),用键值对定义所有参数,搭配注释明确每个参数用途:
# 第一个R脚本参数 INPUT_CSV="/home/administrateur/PycharmProjects/Roxane_10X/HD618_naive/outs/all_contig_annotations.csv" MABSILICO_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/MabSilico_HD618_naive.csv" FASTA_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/HD618_naive.fasta" # VQuest相关参数 VQUEST_INPUT_FASTA="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/HD618_naive.fasta" VQUEST_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/vquest_HD618_naive.tsv" # 第二个R脚本参数 VQUEST_INPUT_TABLE="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/vquest_HD618_naive.tsv" CLONOTYPE_PROP_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/proportion_clonotype_HD618_naive.csv" IGHV_PROP_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/IGHV_HD618_naive.csv" IGKV_PROP_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/IGKV_HD618_naive.csv" IGLV_PROP_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/IGLV_HD618_naive.csv" # 第三个R脚本参数 COMPARE_TABLE1="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/IGHV_HD618_naive.csv" COMPARE_TABLE2="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/IGHV_HD619_naive.csv" SIMILARITY_TABLE_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/same_HD618vsHD619_naive.csv" DIFFERENCE_TABLE_OUTPUT="/home/administrateur/Bureau/guillaume/fichier_workflow/test_fusion/dif_HD618vsHD619_naive.csv" # 固定路径(可选,将硬编码路径提取到配置,方便后期修改) WORKFLOW_ROOT="/home/administrateur/Bureau/guillaume/fichier_workflow" SCRIPT_DIR="$WORKFLOW_ROOT/Script"
2. 修改原Bash脚本
将依赖位置参数的逻辑改为读取配置文件变量,同时增加基础错误检查:
#!/bin/bash # 检查是否传入配置文件 if [ $# -ne 1 ]; then echo "用法: $0 <配置文件路径>" exit 1 fi CONFIG_FILE="$1" # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then echo "错误: 配置文件 $CONFIG_FILE 不存在" exit 1 fi # 加载配置文件 source "$CONFIG_FILE" # 执行第一个R脚本 Rscript "$SCRIPT_DIR/script_analyse_complete_seq.R" "$INPUT_CSV" "$MABSILICO_OUTPUT" "$FASTA_OUTPUT" || { echo "第一个R脚本执行失败" exit 1 } # 执行VQuest工具 cd "$WORKFLOW_ROOT" || exit 1 vquest --species human --receptorOrLocusType IG --fileSequences "$VQUEST_INPUT_FASTA" || { echo "VQuest执行失败" exit 1 } mv vquest_airr.tsv "$VQUEST_OUTPUT" rm -f Parameters.txt # 执行第二个R脚本 cd "$SCRIPT_DIR" || exit 1 Rscript "$SCRIPT_DIR/script_after_vquest.R" "$VQUEST_INPUT_TABLE" "$CLONOTYPE_PROP_OUTPUT" "$IGHV_PROP_OUTPUT" "$IGKV_PROP_OUTPUT" "$IGLV_PROP_OUTPUT" || { echo "第二个R脚本执行失败" exit 1 } # 执行第三个R脚本 Rscript "$SCRIPT_DIR/script_opti_comp_tableau.R" "$COMPARE_TABLE1" "$COMPARE_TABLE2" "$SIMILARITY_TABLE_OUTPUT" "$DIFFERENCE_TABLE_OUTPUT" || { echo "第三个R脚本执行失败" exit 1 } echo "travail brute termine"
3. 使用方式
只需传入配置文件路径即可执行,无需记忆14个参数的顺序:
sh bash_fusion.sh workflow_config.conf
额外优化建议
- 制作配置文件模板(比如
workflow_config.template.conf),用户复制后修改参数即可 - 在加载配置后增加关键路径的存在性检查,提前报错避免流程中途失败
- 处理多样本时,可复制多个配置文件(如
HD618_config.conf、HD619_config.conf),通过循环批量执行脚本
内容的提问来源于stack exchange,提问作者Guillaume
相关产品推荐
相关产品推荐

