读取文件作为跳过行的命令的输入

时间:2016-04-21 13:40:50

标签: bash

我试图使用文本文件的内容作为命令的输入。我知道怎么读文件就好了。但是,当我将读取行传递给我想要执行的命令时,脚本开始跳过每隔一行。

给定一个名为queue的纯文本文件:

one
two
three
four

按预期打印出每一行:

queue=`pwd`/queue
while read input; do
  echo $input
done < $queue

输出:

one
two
three
four

但是,当我将$input传递给命令时,会跳过其他所有行:

queue=`pwd`/queue
while read input; do
  echo $input
  transcode-video --dry-run $input
done < $queue

输出(转码 - 视频输出了一堆东西,但为了简洁,我省略了它。我不相信它是相关的):

one
three

我设法让我的脚本工作,首先将整个文件读入一个数组,然后遍历数组,但我仍然不明白为什么直接循环文件并不起作用。我假设文件指针以某种方式升级,但我无法找出原因。 transcode-video是一颗红宝石。执行ruby程序时,有什么我不知道在幕后进行的事情吗? gem的作者提供了一个示例脚本,它实际上使用sed命令从文件中删除了行,并且工作正常。

有人能解释一下这里发生了什么吗?

1 个答案:

答案 0 :(得分:3)

启动的应用尝试处理stdin,并读取一行。尝试:

transcode-video --dry-run $input </dev/null

或者查看手册以获取完成此任务的命令行标志。