我试图使用文本文件的内容作为命令的输入。我知道怎么读文件就好了。但是,当我将读取行传递给我想要执行的命令时,脚本开始跳过每隔一行。
给定一个名为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
命令从文件中删除了行,并且工作正常。
有人能解释一下这里发生了什么吗?
答案 0 :(得分:3)
启动的应用尝试处理stdin,并读取一行。尝试:
transcode-video --dry-run $input </dev/null
或者查看手册以获取完成此任务的命令行标志。