2012-08-31 171 views
3

我知道如何到標準輸出重定向到一個文件,但有可能到標準輸出重定向到一個進程(Linux環境)?stdout重定向到正在運行的進程

例如,如果我將積極SSH會話通過「〜^ Z」的背景下,是有辦法,然後開始我的本地主機上的其他程序和標準輸出重定向到SSH會話?

謝謝!

+0

我可以想到一些奇怪的遊戲,我嘗試使用命名管道玩 - 但它不會很漂亮。 –

+0

這是準無關,但我不能推薦這篇文章足夠http://www.linusakesson.net/programming/tty/index.php。它解釋了爲什麼下面命名的管道解決方案可行 – nsfyn55

回答

3

有時像

echo "something" > /proc/pid-of-process/fd/0 

作品一招,但如果他們連接到虛擬終端,它不會。

所以,這裏是做你想要的東西的一種方式。

  1. **配置您的SSH連接以使用證書/無密碼登錄。
  2. 創建命名管道(如mkfifo mypipe
  3. 使用尾從管道中讀取並傳遞到SSH過程,如:

    tail -f mypipe | ssh -t -t [email protected]

  4. 發送任何你想進入SSH會話到命名管道,如:

    echo "ls -l" > mypipe

    所以,如果你從另一個需要管的東西程序,你只是做

    ./my-program > /path/to/mypipe

  5. 大功告成。

一些注意事項:

  1. **是可選的,但如果你不這樣做,你將不得不鍵入上啓動SSH會話的終端密碼,則無法通過它通過管道。實際上,如果你嘗試了,一旦SSH連接完成,它就會以明文的形式出現在管道中。
  2. 您的SSH會話現在只與命名管道一樣安全。只是一個頭。
  3. 您將無法使用SSH會話,一旦你連接,從始發終端。你必須使用命名管道。
  4. 你總是可以CTRL + C在原有終端的SSH進程殺死它,恢復終端的功能。
  5. 的輸出會出現在原來的終端上 - 也許很明顯,但我只是想指出來。
  6. -f選項tail對於防止SSH進程在管道爲空時接收EOF是必要的。還有其他方法可以阻止管道關閉,但這在我看來是最簡單的。
  7. -t -t選項ssh強制tty分配,否則它會抱怨因爲標準輸入您的情況下管道。
  8. 最後,幾乎可以肯定有更好的方法來做你想做的事情 - 如果這是嚴重/長期的,你應該考慮找到它。
相關問題