以下是我编写的用于在参数/输入文件./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
中的行数对应于给定标准输入的次数。所以在上面的例子中,脚本应该运行六次,因为有六行。
答案 0 :(得分:3)
我会冒险 ./runnable
一直寻找stdin 。如果 read
没有输入,则while
循环在一次迭代后结束。
推理:您的示例为我工作 (TM)
,将我碰巧拥有的文件(/etc/services
)替换为final_file
并注释掉调用的行./runnable
。
另一方面,如果我将./runnable
调用替换为仅仅寻求并丢弃标准输入的单行调用(例如, cat - > /dev/null
或 { {1}} ),我得到你描述的行为。
(请注意,您希望在 perl -ne 1
的呼叫周围使用反引号或$()
。)
答案 1 :(得分:0)
echo $line
while read line; do
while read line; do echo $line; done
不会读取空格分隔的输入,而是读取行分隔的输入。