读取文件作为跳过行的命令的输入
我试图使用文本文件的内容作为命令的输入。我知道如何阅读文件就好了。但是,当我将读取行传递给要执行的命令时,脚本开始跳过其他所有行。读取文件作为跳过行的命令的输入
给定一个纯文本文件命名为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
命令实际上将文件中的行从文件中剥离出来,并且工作正常。
有人可以解释这里发生了什么吗?
启动的应用程序尝试处理stdin,并读取一行。请尝试:
transcode-video --dry-run $input </dev/null
或者检查手册中是否存在执行该作业的命令行标志。
废话。而已!我认为它会将_use_ $输入作为stdin输入。谢谢! –
@JordanBondo命令行参数不是标准输入。它很可能使用'$ input'参数*和*读取标准输入。许多命令都这样做。 –
@EtanReisner哦,对。我知道这一点(如果我确实需要花费2秒钟的时间思考) –
这实际上是[此问题](http://stackoverflow.com/q/9393038/258523)及其重复项的副本。 –