2013-12-11 169 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

相關問題