在Linux中为多个文件运行可执行终端程序以生成多个输出文件

时间:2014-06-19 22:18:21

标签: linux shell terminal executable csh

我有一个在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脚本?

2 个答案:

答案 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