我想要执行以下命令:
$SCHRODINGER/utilities/prepwizard [options] inputfile outputfile
$SCHRODINGER 是一个软件的导出,在[选项]中我必须控制程序内一些没有问题的计算变量:
例如:
$SCHRODINGER/utilities/prepwizard -watdist 0 填充侧链 -fillloops 输入文件 输出文件
我想对多个扩展名为 .pdb 的文件运行它,但问题是我必须逐个运行它,而不是同时运行。也就是说,只要执行以下任一操作,输出也可能是 .pdb
我已经编写了此代码,但是它当时会执行所有文件,这不是我想要的:
for i in `ls *pdb`
do
$ SCHRODINGER / utilities / prepwizard [options] $i prep_$i
done
答案1
首先,永远不要解析 的输出。这可能会发生不好的事情。像和ls
这样的字符实际上可能出现在文件名中。为了解决这个问题,bash 通配符可以为你提供帮助:\r
\n
for file in *.pdb
do
${SCHRODINGER}/utilities/prepwizard [options] "$file" "prep_${file}"
done
或者如果你想要一行代码:
for file in *.pdb; do ${SCHRODINGER}/utilities/prepwizard [options] "$file" "prep_${file}"; done
这将依次执行每个文件,并等到prepwizard
应用程序完成后再继续执行下一个文件。
答案2
要按顺序执行多个命令(在前一个命令完成后再执行一个命令),可以用分号分隔它们。
因此,您可以在字符串中准备所有命令,并在循环后对它们进行评估:
allcommands=""
for i in `ls *pdb`
do
allcommands="$allcommands;SCHRODINGER options"
done
eval $allcommands