读取文件时bash脚本出错

时间:2009-08-04 19:45:13

标签: bash

以下是我编写的用于在参数/输入文件./runnable上运行可执行文件input的脚本。

它从另一个名为final_file的文件中获取标准输入,并将其输出到名为outfile的文件中。 final_file中有91行(即91个不同的标准空格分隔输入),因此bash脚本应该调用./runnable输入91次。

但是,我不确定为什么它只召唤一次。什么是错误的任何建议?

#!/bin/bash

OUTFILE=outfile
(

a=0

while read line
do 

    ./runnable input
    echo "This is line number: $a"
    a='expr $a+ 1'

done<final_file

) >$OUTFILE

澄清一下,final_file看起来像是

_ _DATA_ _
2,9,2,9,10,0,38
2,9,2,10,11,0,0
2,9,2,11,12,0,0
2,9,2,12,13,0,0
2,9,2,13,0,1,4
2,9,2,13,3,2,2

等等。一次一行是标准输入。 final_file中的行数对应于给定标准输入的次数。所以在上面的例子中,脚本应该运行六次,因为有六行。

2 个答案:

答案 0 :(得分:3)

我会冒险 ./runnable一直寻找stdin 。如果 read 没有输入,则while循环在一次迭代后结束。

推理:您的示例为我工作 (TM),将我碰巧拥有的文件(/etc/services)替换为final_file并注释掉调用的行./runnable

另一方面,如果我将./runnable调用替换为仅仅寻求并丢弃标准输入的单行调用(例如, cat - > /dev/null { {1}} ),我得到你描述的行为。

(请注意,您希望在 perl -ne 1 的呼叫周围使用反引号或$()。)

答案 1 :(得分:0)

  • 使用-x运行shell脚本 一些调试输出的选项。
  • echo $line
  • 之后添加while read line; do
  • 请注意,while read line; do echo $line; done不会读取空格分隔的输入,而是读取分隔的输入。