linux - 使用 afni 程序在 tcsh 中进行 foreach 循环

标签 linux shell unix foreach terminal

我在工作中使用一个名为 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 中运行。

如果我还需要提供任何其他信息,请告诉我。

最佳答案

你走在正确的轨道上。

尝试添加/替换这个

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

健康教育

关于linux - 使用 afni 程序在 tcsh 中进行 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27968185/

相关文章:

c++ - 如何在 C++ 中确定 Linux 套接字绑定(bind)到哪些接口(interface)

Java 脚本 (JSR223) = 用于模板化的 Bean/Script Shell?

c++ - C++ 的手册页在哪里?

bash - Pig 0.12.0 不会使用反引号执行时区更改的 shell 命令

linux - Password expires 和 Account expires 和有什么不一样? chage -l 用户名命令的输出

linux - 我可以用什么来捕获我在 bash 中运行的每个命令(a-la 历史)

python - 直接在命令行写python脚本

shell - "set -e"在 shell 和命令替换中

unix - find与grep有什么区别?

linux - Unix 对多个条件进行排序