【发布时间】:2013-11-12 20:17:55
【问题描述】:
观察当我一个接一个地发出两个命令时会发生什么,而不是在一行中,用分号分隔:
制作管道并启动电影:
$ mkfifo pipe1
$ tail -f /dev/null > pipe1 &
$ cat pipe1 | omxplayer /path/to/video.mp4
退出试验 1:
$ echo -n q > pipe1; # Exits movie, but omxplayer hangs
$ echo > pipe1; # Completes exit process
退出试验 2:
$ echo -n q > pipe1; echo > pipe1 # Does nothing
退出试验 3:
$ echo -n q > pipe1; sleep 1; echo > pipe1 # Works just like trial 1
有人可以解释为什么试验 2 什么都不做。另外,有没有更好的方法通过命名管道发出退出命令,不需要两个echo 语句?
【问题讨论】:
-
如果您的目标是运行两个输出到 FIFO 的命令而不关闭它们之间的 FIFO,则可以轻松解决:
{ foo; bar; } >pipe。但是,从您描述的行为来看,听起来 omxplayer 可能要求您关闭 FIFO。 -
...顺便说一下,
echo -n不是 POSIX 标准(echo -E也不是)。最好使用printf。
标签: shell named-pipes io-redirection