我有一个在Linux终端上运行的可执行程序。该计划的工作原理如下:
在终端I中输入程序的名称。然后它给我以下提示:outputfile,times,input file,option,ect。我试图创建一个脚本来运行目录中所有文件的程序。除了输出和输入文件因文件而异之外,程序提供的所有提示都是相同的。大约有300个输入文件名为001h.pdb ... 300h.pdb。我需要输出文件为001p.acc ... 300p.acc。
(另外,对程序提示的响应是:" outputfile",1," inputfile",bnl,next,next,allatm,next,next,没有。)
什么是合理的csh脚本?
答案 0 :(得分:1)
听起来像expect
可能就是你想要的。见http://linux.die.net/man/1/expect。基本上,您可以编写脚本expect
来与您需要在300个文件上运行的程序进行交互,并自动执行响应程序提示的过程。
答案 1 :(得分:0)
我觉得这样的事情可能会成功......
#!/bin/bash
# Loop through all .pdb files
for f in *.pdb
do
echo DEBUG: Processing $f
out=${f/h.pdb/p.acc} # Determine name of output file
# Echo all parameters needed by program "prog"
( echo "$out"
echo 1
echo "$f"
echo bnl
echo next
echo next
echo allatm
echo next
echo next
echo no ) | ./prog
done
将上述内容保存在名为auto
的文件中,然后键入以下内容以首先更改其模式(从而使其可执行),然后运行它:
chmod +x auto
./auto
根据您是否重视简洁性而非可读性,您可能会或可能不会更喜欢功能相同的以下内容:
#!/bin/bash
# Loop through all .pdb files
for f in *.pdb
do
out=${f/h.pdb/p.acc} # Determine name of output file
echo DEBUG: Processing $f into $out
# Echo all parameters needed by program "prog". Note "\n" is a newline
echo -e "$out\n1\n$f\nbnl\nnext\nnext\nallatm\nnext\nnext\nno" | ./prog
done