【问题标题】:Mac Terminal Foreach Command Not Found While Running Shell Script运行 Shell 脚本时未找到 Mac 终端 Foreach 命令
【发布时间】:2014-04-25 22:19:10
【问题描述】:

我正在尝试在终端中运行一个脚本,但我收到了错误消息,即未找到 foreach 命令。在过去的 6 个小时里,我一直试图在网上找到答案,但我似乎找不到任何东西。你能告诉我为什么这是输出'line 20: foreach: command not found'吗?

脚本在这里:

#!/bin/csh
# Source name: fa_extract
# Author name: ----
# Last modified by: Apr 29, 2013
# Date modified: Apr 29, 2013
# Program description: extract FA, AD, RA values
# Main function: extract FA, AD, RD, MD, into txt files
# Variable description: age; wt, waytotal


echo "# Source name: fa_extract"
echo "# Author name: ----"
echo "# Last modified by: Apr 29, 2013"
echo "# Date modified: Apr 29, 2013"
echo "# Program description: extract FA, AD, RA values"
echo "# Main function: extract FA, AD, RD, MD, into txt files"
echo "# Variable description: age; wt, waytotal"

#1st level
foreach sub$(01_007_c/01_007_c_L 01_007_c/01_007_c_R 01_012_c/01_012_c_L 01_012_c/01_012_c_R 01_013_c/01_013_c_L 01_013_c/01_013_c_R 01_014_c/01_014_c_L 01_014_c/01_014_c_R 01_015_c/01_015_c_L 01_015_c/01_015_c_R 01_029_p/01_029_p_L 01_029_p/01_029_p_R 01_035_p/01_035_p_L 01_035_p/01_035_p_R 01_036_p/01_036_p_L 01_036_p/01_036_p_R 01_037_p/01_037_p_L 01_037_p/01_037_p_R 01_038_p/01_038_p_L 01_038_p/01_038_p_R 01_040_p/01_040_p_L 01_040_p/01_040_p_R 01_041_p/01_041_p_L 01_041_p/01_041_p_R 01_042_p/01_042_p_L 01_042_p/01_042_p_R 01_043_p/01_034_p_L 01_043_p/01_043_p_R 01_044_p/01_044_p_L 01_044_p/01_044_p_R 01_045_p/01_045_p_L 01_045_p/01_045_p_R 01_046_p/01_046_p_L 01_046_p/01_046_p_R)

cd ~/Desktop/OBI_pre_process/DTI/Tractography/SLF/${sub}/

echo "----------------------------------------------------------------------------------------------------------"
pwd


set wt=`cut -f2 -d '' waytotal`#normalization by waytotal
echo "waytotal = $wt"
fslmaths fdt_paths.nii.gz -div $wt fdt_paths_fa_norm.nii.gz 
fslmaths fdt_paths_fa_norm.nii.gz -thrP 40 -bin fdt_paths_fa_bin.nii.gz # threshold by thrP40 & binarize

fslmaths *_DTI_FA.nii.gz -mas fdt_paths_fa_bin.nii.gz fa_masked.nii.gz # masking FA maps...................FA
fslstats fa_masked.nii.gz -M > fa.txt

fslmaths *_DTI_L2.nii.gz -mas fdt_paths_fa_bin.nii.gz L2_masked.nii.gz # masking L maps..................RD
fslmaths *_DTI_L3.nii.gz -mas fdt_paths_fa_bin.nii.gz L3_masked.nii.gz
fslmaths L2_masked.nii.gz -add L3_masked.nii.gz L2_L3_masked.nii.gz
fslmaths L2_L3_masked.nii.gz -div 2 rd.nii.gz
fslstats rd.nii.gz -M > rd.txt

fslmaths *_DTI_L1.nii.gz -mas fdt_paths_fa_bin.nii.gz ad.nii.gz # masking L maps..................AD
fslstats ad.nii.gz -M > ad.txt

fslmaths *_DTI_MD.nii.gz -mas fdt_paths_fa_bin.nii.gz md.nii.gz # masking L maps..................MD
fslstats md.nii.gz -M > md.txt

end # <<<<<<<<<subject loop ends
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1st level done" 

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2nd level

rm -rf /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/fa/athletes*.txt
rm -rf /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/fa/controls*.txt


# athletes
foreach sub$(01_007_c/01_007_c_L 01_007_c/01_007_c_R 01_012_c/01_012_c_L 01_012_c/01_012_c_R 01_013_c/01_013_c_L 01_013_c/01_013_c_R 01_014_c/01_014_c_L 01_014_c/01_014_c_R 01_015_c/01_015_c_L 01_015_c/01_015_c_R 01_029_p/01_029_p_L 01_029_p/01_029_p_R 01_035_p/01_035_p_L 01_035_p/01_035_p_R 01_036_p/01_036_p_L 01_036_p/01_036_p_R 01_037_p/01_037_p_L 01_037_p/01_037_p_R 01_038_p/01_038_p_L 01_038_p/01_038_p_R 01_040_p/01_040_p_L 01_040_p/01_040_p_R 01_041_p/01_041_p_L 01_041_p/01_041_p_R 01_042_p/01_042_p_L 01_042_p/01_042_p_R 01_043_p/01_034_p_L 01_043_p/01_043_p_R 01_044_p/01_044_p_L 01_044_p/01_044_p_R 01_045_p/01_045_p_L 01_045_p/01_045_p_R 01_046_p/01_046_p_L 01_046_p/01_046_p_R)

cd /Desktop/OBI_pre_process/DTI/Tractography/SLF/${sub}/
cat             fa.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_fa.txt
cat             rd.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_rd.txt
cat             ad.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_ad.txt
cat             md.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_md.txt
#cat            ../age.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athltes_age.txt
cat           ../seg_0.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_seg_0.txt
cat               ../seg_1.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_seg_1.txt
cat               ../seg_2.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/athletes_seg_2.txt

end
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2nd level athletes done" 

# controls
foreach sub$(01_007_c/01_007_c_L 01_007_c/01_007_c_R 01_012_c/01_012_c_L 01_012_c/01_012_c_R 01_013_c/01_013_c_L 01_013_c/01_013_c_R 01_014_c/01_014_c_L 01_014_c/01_014_c_R 01_015_c/01_015_c_L 01_015_c/01_015_c_R 01_029_p/01_029_p_L 01_029_p/01_029_p_R 01_035_p/01_035_p_L 01_035_p/01_035_p_R 01_036_p/01_036_p_L 01_036_p/01_036_p_R 01_037_p/01_037_p_L 01_037_p/01_037_p_R 01_038_p/01_038_p_L 01_038_p/01_038_p_R 01_040_p/01_040_p_L 01_040_p/01_040_p_R 01_041_p/01_041_p_L 01_041_p/01_041_p_R 01_042_p/01_042_p_L 01_042_p/01_042_p_R 01_043_p/01_034_p_L 01_043_p/01_043_p_R 01_044_p/01_044_p_L 01_044_p/01_044_p_R 01_045_p/01_045_p_L 01_045_p/01_045_p_R 01_046_p/01_046_p_L 01_046_p/01_046_p_R)# >>>>>>>>>subject loop

cd /Desktop/OBI_pre_process/DTI/Tractography/SLF/${sub}/
cat             fa.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_fa.txt
cat             rd.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_rd.txt
cat             ad.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_ad.txt
cat             md.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_md.txt
#cat            ../age.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_age.txt
cat           ../seg_0.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_seg_0.txt
cat           ../seg_1.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_seg_1.txt
cat           ../seg_2.txt >> /Desktop/OBI_pre_process/DTI/Tractography/SLF/2nd_level/thrP40/N21_17/controls_seg_2.txt

end
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2nd level controls done" 
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ALL DONE !" 

【问题讨论】:

  • 您是否通过说bash filename 来执行您的脚本?如果是这样,它需要是csh filename

标签: bash shell terminal


【解决方案1】:

失败的原因是 csh 具有其他 shell 所没有的 foreach 循环。 因此,如果您尝试通过任何其他 shell 执行脚本,它将失败。

由于您已经拥有#!/bin/csh,因此您可以使用./scriptname 执行脚本,但如果您打算在其他shell 中执行它------

用下面的代码替换每一行

for sub in $(echo "all the strings seperated by a space")
 do 

 \# rest of your script inside for should come here

done         #done is replacing end in your case

如果您不能使用echo "string SEPERATED by spaces",那么您可以将cut 与您拥有的分隔符一起使用。

我无法确定您在 foreach 语句中使用的分隔符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多