【问题标题】:foreach loop in tcsh using afni program使用 afni 程序在 tcsh 中进行 foreach 循环
【发布时间】:2015-01-15 16:28:02
【问题描述】:

我在工作中使用了一个名为 AFNI 的程序,我们都不是程序员,但我们有足够的知识来解决问题。通常,当我们有很多要运行 AFNI 的文件时,我们必须在将命令复制到终端之前复制并粘贴命令并在记事本中编辑文件名,这可能会引发许多错误。我们正在尝试通过使用 shell 脚本来简化这一过程。

我正在尝试在其中包含 .nii 文件的文件夹上运行 foreach 循环,并且我希望将这些文件名附加到以“3dclustsim”开头的行的末尾。我希望将文件名放在 $name 所在的位置,以便在该文件上执行命令。

到目前为止,我有:

#!/bin/tcsh

clear
set path = ($path /home/lab/abin)
afni


foreach name (`*.nii`)
    3dclustsim -fwhmxyz 16 16 16 -pthr 0.05 0.01 0.005 0.001 -athr 0.05 -nodec -iter 10000 -OKsmallmask -mask /home/lab/Desktop/Masks/$name
end

我对上述任何迭代或我在网上找到的任何修改都没有运气。我知道很多人对 C shell 不屑一顾,但是这个程序只能在终端的 Unix/Linux/Mac 机器上的 tcsh 中运行。

如果还有什么需要我提供的,请告诉我。

【问题讨论】:

  • 我意识到我忘记提供收到的错误:*.nii: No match.
  • 为了将来参考,您可以点击底部的edit 编辑您的帖子。
  • #!/bin/tcsh 应该是 #!/bin/tcsh -f。如果没有-f,它将浪费时间执行你的启动文件(.tcshrc 或其他)——更糟糕的是,脚本可能依赖你的启动文件中的某些内容,这意味着脚本不会'其他人不能使用。为什么要在脚本顶部执行clear?我的终端屏幕上可能有有用的信息;如果我想清除它,我可以自己键入 Ctrl-L。反引号是真正的问题,但如果你得到*.nii: No match,那么你的当前目录中就没有任何这样的文件。

标签: linux shell unix foreach terminal


【解决方案1】:

你在正确的轨道上。

尝试添加/替换它

cd /path/to/dir/with/nii_files
/bin/ls -l *.nii

foreach name ( * ) 
     3dclustsim -fwhmxyz 16 16 16 -pthr 0.05 0.01 0.005 0.001 -athr 0.05 -nodec -iter 10000 -OKsmallmask -mask /home/lab/Desktop/Masks/$name
end

您的afni 程序可能正在读取一个配置文件,该文件告诉它将文件放在哪里。你必须 cd 到正确的目录来处理它们。

您的操作可能正确,但收到错误消息*.nii : No Match 是在告诉您要处理的文件不存在。

但是,您的问题令人困惑的部分是您已将 *.nii 括在反引号中(在 for 循环中)。反引号的意思是“找到结束的反引号,然后获取封闭的字符串并将其作为命令执行。如果您在该目录中确实没有文件,您应该看到类似

 foreach name (`nonesuch`)
 nonesuch : Command not Found.

但是,也就是说,如果您使用 cdls,您可以向自己证明您在正确的目录中,然后应该处理文件。

此外,如果您使用 Windows 编辑器创建此脚本,然后在 Unix/Linux 上执行,则需要

dos2unix ./myScript.sh
chmod 755 ./myScript.sh
#then you can run it
./myScript.sh

IHTH

【讨论】:

  • Afni 在“abin”中,这就是为什么我必须先将终端指向它才能打开它。这样做后我还能 cd 到一个目录并期望 afni 正常运行吗?
  • 鉴于标准做法和没有配置文件具有覆盖的 DATAOUT_DIR(或类似),1. 您在 PATH 变量中有 abin,因此您可以从任何目录运行程序。 2. 如果您在启动afni 之前没有完成cd /some/otherdir,那么文件应该在同一个目录中。我鼓励你使用像/bin/ls -l *.nii 这样的标准系统工具。如果您收到消息“未找到文件”,那么您必须弄清楚 afni 将文件放在哪里,也许它在文档中,也许您需要询问另一个 afni 用户,或者如果您知道有一个配置文件,看那里。祝你好运!
猜你喜欢
  • 2015-03-27
  • 2010-09-15
  • 1970-01-01
  • 2020-06-17
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
相关资源
最近更新 更多