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

Singularity容器中向AFNI传递带引号参数的问题求助

问题:Singularity容器中AFNI 3dDeconvolve的-gltsym参数传递失败

我在bash终端运行AFNI 19.3.18版本的Singularity容器,试图给3dDeconvolve传递参数-gltsym 'SYM: +exc -eq',但无论怎么调整写法,程序都报错无法识别“exc”。

已尝试的写法:

  • -gltsym "SYM: +exc -eq"
  • -gltsym "'SYM: +exc -eq"
  • -gltsym "SYM: \"+exc -eq\""
  • -gltsym "SYM: \+exc \-eq"
  • 将参数存入变量后调用:
    arg=("'SYM:\ +exc\ -eq'")
    # 命令中调用:-gltsym"${args[@]}"
    

完整命令(问题行已标注):

3dDeconvolve \
  -input /work/06953/jes6785/ls6/NECTARY_DATA/derivatives/fmriprep-v22.0.2/sub-b071/ses-01/func/sub-b071_ses01_task-cyb_dir-AP_space-MNI152NLin2009cAsym_desc-preproc_6.0blur+scale.nii \
  -mask /work/06953/jes6785/ls6/NECTARY_DATA/derivatives/fmriprep-v22.0.2/sub-b071/ses-01/func/sub-b071_ses-01_task-soc_dir-AP_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz \
  -polort A \
  -num_stimts 2 \
  -stim_times_AM1 1 /work2/06953/jes6785/ls6/NECTARY_DATA/derivatives/AFNI_Behavioral_Files/sub_b071/sub_071-1_tf_under_1.1D dmBLOCK\(2\) \
  -stim_label 1 exc \
  -stim_times_AM1 2  /work2/06953/jes6785/ls6/NECTARY_DATA/derivatives/AFNI_Behavioral_Files/sub_b071/sub_071-1_tf_equal_1.1D dmBLOCK\(2\) \
  -stim_label 2 eq \
  -ortvec /work2/06953/jes6785/ls6/NECTARY_DATA/derivatives/Confound_Files/sub_b071/sub_b071_conservative_confounds.txt \
  test \
  # 问题行:原写法为-gltsym 'SYM: +exc -eq' \
  -gltsym 'SYM: +exc -eq' \
  -glt_label 1 exc \
  -fout -tout \
  -x1D X.xmat.1D \
  -xjpeg 071X.jpg \
  -x1D_uncensored 071X.nocensor.xmat.1D \
  -fitts fitts.071 \
  -errts errtsSYM:exc-eqSYM:1-2.071 \
  -bucket stats.071 

解决建议:

1. 修正Singularity调用时的参数传递

问题核心是外层bash的引号解析导致容器内程序拿到的参数不完整。正确的做法是在singularity exec命令中,给-gltsym的参数用双引号包裹,确保容器内的3dDeconvolve能完整接收SYM: +exc -eq作为单个参数:

singularity exec afni-19.3.18.sif 3dDeconvolve \
  -input /work/06953/jes6785/ls6/NECTARY_DATA/derivatives/fmriprep-v22.0.2/sub-b071/ses-01/func/sub-b071_ses01_task-cyb_dir-AP_space-MNI152NLin2009cAsym_desc-preproc_6.0blur+scale.nii \
  -mask /work/06953/jes6785/ls6/NECTARY_DATA/derivatives/fmriprep-v22.0.2/sub-b071/ses-01/func/sub-b071_ses-01_task-soc_dir-AP_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz \
  -polort A \
  -num_stimts 2 \
  -stim_times_AM1 1 /work2/06953/jes6785/ls6/NECTARY_DATA/derivatives/AFNI_Behavioral_Files/sub_b071/sub_071-1_tf_under_1.1D dmBLOCK\(2\) \
  -stim_label 1 exc \
  -stim_times_AM1 2  /work2/06953/jes6785/ls6/NECTARY_DATA/derivatives/AFNI_Behavioral_Files/sub_b071/sub_071-1_tf_equal_1.1D dmBLOCK\(2\) \
  -stim_label 2 eq \
  -ortvec /work2/06953/jes6785/ls6/NECTARY_DATA/derivatives/Confound_Files/sub_b071/sub_b071_conservative_confounds.txt test \
  -gltsym "SYM: +exc -eq" \
  -glt_label 1 exc \
  -fout -tout \
  -x1D X.xmat.1D \
  -xjpeg 071X.jpg \
  -x1D_uncensored 071X.nocensor.xmat.1D \
  -fitts fitts.071 \
  -errts errtsSYM:exc-eqSYM:1-2.071 \
  -bucket stats.071 

2. 先在容器内验证参数有效性

如果上述写法仍报错,先进入容器内部直接测试参数是否正常:

# 进入Singularity容器
singularity shell afni-19.3.18.sif

# 在容器内执行简化测试命令
3dDeconvolve -num_stimts 2 -stim_label 1 exc -stim_label 2 eq -gltsym "SYM: +exc -eq" -fout -tout -bucket test_output

如果这个测试命令能运行,说明参数本身没问题,问题出在Singularity调用时的参数传递,需要检查外层bash的引号或转义是否干扰了参数解析。

3. 避免过度转义或多套引号

之前尝试的写法要么额外添加了单引号,要么对+、-进行了不必要的转义,导致容器内程序接收到的参数被拆分或包含多余字符,无法识别exc这个刺激标签。直接使用双引号包裹SYM: +exc -eq即可保证参数完整传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:12:09