【发布时间】: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