2011-10-31 73 views
2

我試圖通過ssh獲取遠程文件並在本地腳本中逐行處理它。到目前爲止,我已經試過這如何在Perl中通過ssh獲取輸入信息

open(INPUT,"| ssh [email protected] cat /dir1/dir2/file.dat") 

但顯然這只是打印FILE.DAT到標準輸出。

我知道我可能只使用scp文件和處理它,但是......

回答

3

你管道 SSH。我想你想將管道移動到另一端,以便可以讀取該cat命令的輸出。

+0

yeaaaah,剛剛通過試驗/錯誤的方法發現了它:-D,但是與你無關嗎? – taiko

1

我會使用

$file_contents = `ssh [email protected] cat /dir1/dir2/file.dat`; 
@lines = split(/\n/, $file_contents); 
. 
. 
. # process the file contents 

即捕獲命令的輸出(即,文件的內容)。

+1

爲什麼不直接說'@lines = qx/ssh ... /'(在這裏使用qx而不是反引號來避免SO的標籤)?這將同時運行和拆分(儘管它會保留\ n的)。也就是說,這樣效率較低。如果文件非常大,則必須將整個內容加載到內存中才能處理它。如果連接速度非常慢,則在處理任何事件之前,您必須等待整個事件加載。 OP的解決方案在修復時不會遇到這些問題。根據我的經驗,反引號通常是要避免的。 – Tanktalus

+0

感謝您的見解:) – djhaskin987