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

Bash脚本中调用变量设置autodockZN网格中心的问题

问题:Bash脚本中正确传递gridcenter参数至prepare_gpf4zn.py

我尝试在Bash脚本中创建变量a,读取文件aver.line.comma.dat的第二列(文件唯一一行包含三个逗号分隔的坐标),并将该变量作为gridcenter参数传入prepare_gpf4zn.py脚本运行。现有代码如下:

a=$(cut -f 2 aver.line.comma.dat)
$MGLROOT/bin/pythonsh ~/Downloads/autodockZN_filesAndTutorial/prepare_gpf4zn.py -l ligand.pdbqt -r protein_tz.pdbqt  -o protein_tz.gpf -p npts=500,500,500 -p gridcenter=echo "$a"  -p parameter_file=AD4Zn.dat

变量a期望的值为:

95.8916,53.8569,28.052

已准备好所有所需输入文件,尝试过gridcenter=$a、gridcenter=(echo $a)等方式均未成功,寻求可行的解决方法。


解决方案

你的问题存在两个关键问题,修正后即可正常传递参数:

  1. 修正cut命令的分隔符:
    因为文件是逗号分隔的,默认cut使用制表符作为分隔符,必须用-d','明确指定分隔符为逗号,才能正确提取第二列:

    a=$(cut -d',' -f 2 aver.line.comma.dat)
    
  2. 正确传递变量到gridcenter参数:
    在-p参数中,直接将变量值赋值给gridcenter即可,无需额外的echo或括号包裹,用双引号包裹变量可避免空格、特殊字符导致的参数解析错误:

    $MGLROOT/bin/pythonsh ~/Downloads/autodockZN_filesAndTutorial/prepare_gpf4zn.py -l ligand.pdbqt -r protein_tz.pdbqt  -o protein_tz.gpf -p npts=500,500,500 -p "gridcenter=$a" -p parameter_file=AD4Zn.dat
    

完整修正后的脚本:

# 正确提取逗号分隔的第二列
a=$(cut -d',' -f 2 aver.line.comma.dat)
# 正确传递gridcenter参数
$MGLROOT/bin/pythonsh ~/Downloads/autodockZN_filesAndTutorial/prepare_gpf4zn.py -l ligand.pdbqt -r protein_tz.pdbqt  -o protein_tz.gpf -p npts=500,500,500 -p "gridcenter=$a" -p parameter_file=AD4Zn.dat

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:40:54