2013-02-05 64 views
1

我想遠程執行一個perl腳本,它通過ssh從stdin獲取數據。 棘手的部分是,我不想將腳本本身上傳到遠程服務器。 遠程腳本將從標準輸入讀取的數據由本地運行的另一個perl腳本生成。如何通過ssh將本地輸出重定向到stdin以遠程執行本地腳本?

假設如下:

  • 我的本地腳本生成的數據被稱爲cron_extract_section.pl將被遠程運行被稱爲cron_update_section.pl
  • 兩個腳本一個參數上
  • 我的本地腳本命令行,一個簡單的字

我設法遠程執行腳本,如果腳本存在於遠程機器上:

./cron_extract_section.pl ${SECTION} 2> /dev/null | ssh [email protected] ~/path/to/remote/script/cron_update_section.pl ${SECTION} 

我也知道,我可以不具有使用以下語法先上傳它運行在遠程服務器上的腳本:

ssh [email protected] "perl - ${SECTION}" < ./cron_update_section.pl 

什麼,我無法弄清楚是怎麼餵養本地腳本cron_update_section.pl通過ssh傳遞給perl,並且還將本地腳本cron_extract_section.pl的結果傳遞給perl。

我嘗試以下,perl腳本執行罰款,但沒有什麼從標準輸入讀取:

./cron_extract_section.pl ${SECTION} 2> /dev/null | ssh [email protected] perl - ${SECTION} < ./cron_update_section.pl 

你知道,如果有可能,而無需修改腳本,這樣做呢?

回答

0

使用DATA文件句柄。在例如:

本地腳本來在遠程計算機上運行:

# script.pl 
while(<DATA>) { 
    print "# $_"; 
} 
__DATA__ 

然後,運行它爲:

(cat script.pl && /cron_extract_section.pl ${SECTION}) | ssh $host perl 
相關問題