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
相关产品推荐
相关产品推荐

