【问题标题】:Is there a way to pipe stdout/stdin across a command?有没有办法通过命令管道标准输出/标准输入?
【发布时间】:2013-12-11 03:14:58
【问题描述】:

或者更具体地说,有没有办法从一个命令中获取标准输出,运行另一个命令,然后使用标准输出作为下一个命令的标准输入? 例如 猫文件.txt|运行命令 | grep "foo"

这似乎让人困惑,为什么有人要这样做。这是我想要做的:

我将另一台计算机(远程)上的网络摄像头通过 ssh user@remote ffmpeg -b 100k -an -f video4linux2 -s 320x280 -r 10 -i /dev/video0 -b 100k -f ogg - | vlc -

我正在尝试做相反的事情。因此,从我的网络摄像头(本地)发送一个提要以显示在远程机器上。 它尝试过: 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”。因此,在为该 ssh“会话”导出 DISPLAY 变量之后,我试图将输出从 ffmpeg 获取到远程计算机上的 vlc。 此外,如果有另一种方法可以做到这一点(除了在远程机器上使用 ssh 来使用第一个命令)我很想尝试一下。(如果有一种方法可以做同样的事情,我将不胜感激这些信息,尽管这与问题并不真正相关)提前致谢。 :)

【问题讨论】:

  • 您可以尝试将对vlc 的调用封装在设置$DISPLAY 的脚本中,尽管这些天您可能需要设置更多$DISPLAY 才能连接到X 服务器。跨度>
  • 你可以试试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 或其他东西,但请先尝试一下。
  • 成功了!惊人的!非常感谢。

标签: ssh stream pipe webcam vlc


【解决方案1】:

要将source 的输出作为输入传递给sink,前提是run_command 必须在您的情况下运行sink 之前结束:

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

【讨论】:

  • 我尝试了这个和类似的变体,但我无法通过 ssh 让它工作。
  • 没关系,我刚刚得到它: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 - ; }"
  • 对于ssh 命令,可以使用@Mark Plotnick's command。在这种情况下不需要使用{} 语法和重定向。
  • 我知道。我将此标记为答案,因为它已作为答案发布并且也是有效答案。我正在使用 Mark Plotnic 的命令,但我觉得这个命令可能更好地回答了我最初的问题,并且更通用一些。
猜你喜欢
  • 2021-04-29
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2014-02-02
相关资源
最近更新 更多