2013-12-11 127 views
0

或者更具体地说,是否有办法从一个命令中获取stdout,运行另一个命令,然后使用stdout作为下一个命令的stdin? 例如 cat file.txt | run_command | grep“foo”有没有办法通过命令管理标准输出/标准输入?

这似乎令人困惑,为什么有人会想这样做。以下是我正在尝试执行的操作:

我通过 将我的其他计算机(远程)上的摄像头传送到本地计算机ssh user @ remote ffmpeg -b 100k -an -f video4linux2 -s 320x280 -r 10 - 我/ dev/video0 -b 100k -f ogg - | vlc -

我试图做相反的事情。所以,从我的网络摄像头(本地)发送一个饲料以显示在远程机器上。 It tryed: ffmpeg -b 100k -an -f video4linux2 -s 320x280 -r 10 -i/dev/video0 -b 100k -f ogg - | ssh user @ remote vlc -

这不起作用,因为在启动vlc之前,我必须在远程计算机上“导出DISPLAY =:0.0”。所以我试图从远程计算机上获取ffmpeg的输出到vlc,然后导出该ssh会话的DISPLAY变量。 另外,如果还有其他的方法可以做到这一点(除了在远程机器上使用ssh来使用第一个命令),我很乐意尝试它(同样如果有办法做同样的事情,我会很感激的信息,虽然这不是真正相关的问题)预先感谢。 :)

+0

你可以尝试包装调用'vlc'的脚本设置'$ DISPLAY',尽管这些天你可能需要设置超过'$ DISPLAY'才能连接到X服务器。 –

+0

你可以试试'ffmpeg -b 100k -an -f video4linux2 -s 320x280 -r 10 -i/dev/video0 -b 100k -f ogg - | ssh user @ remote“DISPLAY =:0.0 vlc - ”'看看它是否有效?在我们得到明确的答案之前,可能需要使用xauth或其他东西,但首先尝试一下。 –

+0

工作!真棒!非常感谢。 – linuxfreak003

回答

0

source作为输入通过输出sink因为sink在你的情况下运行之前run_command必须结束:

source | { run_command &>/dev/null; sink; } 
+0

我试过这个和类似的变化,但我无法通过ssh得到它的工作。 – linuxfreak003

+0

没关系我只是明白了: ffmpeg -b 100k -an -f video4linux2 -s 320x280 -r 10 -i/dev/video0 -b 100k -f ogg - | ssh user @ remote“{export DISPLAY =:0.0>/dev/null; vlc - ;}” – linuxfreak003

+0

for ssh' command,you can use [@Mark Plotnick's command](http://stackoverflow.com/questions/ 20509855/IS-有-A-方式对管标准输出-标准输入-跨一个命令/ 20510260?noredirect = 1个#comment30661014_20509855)。在这种情况下,不需要使用'{}'语法和重定向。 – jfs

相关问题