2013-01-16 45 views
3

我想將參數傳遞給在遠程機器上執行的本地腳本。 該腳本工作正常,因爲我測試了它手動傳遞變量。 我想爲此使用plink。 我接受用戶名(arg要傳遞給腳本)並需要通過plink將腳本與腳本一起發送。我使用的命令是:從命令提示符傳遞參數到遠程Ubuntu機器

plink.exe [email protected] -m "myLocalScript.ksh" 

我也曾嘗試:

plink.exe [email protected] -m "myLocalScript.ksh %username%" 

plink.exe [email protected] -m %username% < "myLocalScript.ksh" 

我已經試過管道的參數,並在命令將它們添加到不同的地方等 有誰知道我能做到這一點嗎?

編輯: 我使用cmd.exe而不是cygwin。他們-M選項將執行以下操作:

-m file read remote command(s) from file 
+0

或print - '$ {。sh.version}'如果以上不起作用。祝你好運。 – shellter

+1

'plink.exe'和'%username%'暗示您使用的是基於Windows的cmd行?你使用的是cgywin還是cmd.exe?除非你確實有''myLocalScript.ksh「'作爲fileName(帶有尾部的」「字符),否則你重定向到'plink'可能會失敗。我認爲這是一個錯字?考慮編輯你的帖子,以提醒我們'-m'參數的作用。 'cmd.exe' sytnax通常是'/ m',或者你有文檔說可以使用'-m'。另外,爲了測試這個,製作最簡單的測試腳本,可能只是腳本中的'ls'?祝你好運。 – shellter

+0

嗨避難所,我編輯了這個問題,試着讓它更清晰。 – Cen92

回答

1

-m選項沒有任何機制來傳遞屬性,它只是從字面上運行文件是。問題是,你的Korn Shell腳本在當地到底有沒有翻譯所以沒有機制,這在你的窗戶結束,但不要嘗試這個辦法:

plink [email protected] "tr -d '\r'| ksh -s %username%" < myLocalScript.ksh 

更重要的是使主通話更具可讀性:

call :remotecmd [email protected] myLocalScript.ksh %username% 


exit /B 
:remotecmd 
    setlocal 
    for /f "tokens=2,*" %%i in ("%*") do set options=%%j 
    plink %1 "tr -d '\r'| ksh -s %options%" < %2 
    endlocal 
exit /B 

該命令現在被推廣用於處理任何數量的附加開關。