因此,我有一个非常类似于Bash的问题:如何一次从命令输出读取一行?, 我在做:
while read path; do mplayer $path; done < <(find-me-random-mp3s)
或者
find-me-random-mp3s | while read path; do mplayer $path; done
该命令find-me-random-mp3s
在新行中输出文件路径。该问题在mplayer
运行时开始,它开始消耗find-me-random-mp3s
输出中的行,即path
在每次迭代中应该填充到变量内的行。
我继续进行了这个肮脏的修复:
find-me-random-mp3s | while read path; do cat /dev/null | mplayer $path; done
但是我不太喜欢它,它也阻止了我与mplayer的终端交互。
在这种情况下是否可以使用其他替代方法?
exec 3<&0
while read line
do
mplayer "$line" <&3
done < <(find-me-random-mp3s)
这会将终端输入复制到文件描述符3。在while循环中,从您的find-me-random-mp3s
程序读取stdin的所有位置,除了mplayer
从您的终端文件描述符3获取其stdin的行。因此,您仍然可以与进行交互mplayer
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句