2013-11-25 98 views
0

我試圖從Windows服務器使用Cygwin來自動執行某些需要在遠程Linux服務器上運行的命令。爲了解決這個問題,我構建了一個期望腳本,該腳本在Cygwin中運行,以SSH方式連接到Linux服務器並執行相應的命令。Windows批處理 - 調用Cygwin執行TCL期望腳本

現在我試圖通過使用批處理腳本封裝Cygwin的執行,並通過Windows任務計劃程序進行計劃來進一步實現自動化。

我已經嘗試了以下從我的批處理腳本中調用擊:

c:\cygwin64\bin\bash C:\myscript.exp 

這將導致腳本拋出一個錯誤時,TCL預計將出現語言的語法。

我也嘗試了以下調用從我的批處理腳本期望:

c:\cygwin64\bin\expect C:\myscript.exp 

這將導致腳本時,我嘗試產卵SSH

這裏拋出一個錯誤是從我的片段期望腳本:

#!/usr/bin/expect 
proc doSomething {p1 p2} { 

    expect "* information here:" 
    send -- "$p1\r" 
} 
set server [lrange $argv 0 0] 

spawn ssh [email protected]$server 
# Additional commands below 

有沒有什麼辦法讓我得到這個解決方案的工作?

編輯:

下面是錯誤消息,當我使用bash可執行文件,啓動腳本:

C:\scpbot_reset>scpbot_reset.bat 
C:\cygwin64\home\myaccountr\scpbot_reset\reset_script: line 2: proc: command not fo 
und 
C:\cygwin64\home\myaccountr\scpbot_reset\reset_script: line 3: expect: command not 
found 
C:\cygwin64\home\myaccountr\scpbot_reset\reset_script: line 4: send: command not fo 
und 

以下是錯誤消息時我用期待的可執行啓動腳本:

C:\scpbot_reset>scpbot_reset.bat 
couldn't execute "ssh": no such file or directory 
    while executing 
"spawn ssh [email protected]" 
    (file "C:\cygwin64\home\myaccountr\scpbot_reset\reset_script" line 14) 
+2

當您嘗試產生SSH時,您能否提供錯誤? – tomdemuyt

+0

@tomdemuyt我添加了錯誤信息 – RavB

回答

3

首先,一個真正的期望腳本不能由由bash執行。有些人編寫的代碼是混合在bash和期望之間的 - 這非常類似於Unix,所以我希望即使cygwin也會遇到問題 - 但強烈建議您不要這樣做。

幸運的是,您的腳本確實是一個真正的期望腳本。因此它應該從cygwin外殼調用爲:

expect myscript.exp 

加上任何必需的路徑。

當你這樣做時,失敗的原因是ssh(可能是ssh.exe)根本沒有安裝,或者不在你的PATH上。通過安裝或更正PATH來修復此問題;你大概可以弄清楚你需要做的事情比我能描述所有可能性更快。 (我個人更喜歡在PuTTY套件程序中使用plink.exe,當我需要在Windows上執行腳本化SSH實施時,這完全取決於您。)

+0

FWIW,第二個錯誤信息看起來「正確」;期望在那裏運作正常,但由於無法控制的情況,它不能做你想做的事情。 –

+0

就是這樣。一位同事剛剛過來,並建議將spawn聲明指向SSH的直接路徑。一切似乎都在起作用。謝謝! – RavB

1

嘗試

c:\cygwin64\bin\bash -c "expect /cygdrive/C/myscript.exp" 
+2

順便說一句,'lrange'返回一個列表,'lindex'返回一個列表元素。使用'lindex $ argv 0' –

+0

引發以下錯誤: /usr/bin/bash:expect:找不到命令 我將用lindex替換lrange。 我正在調查與參數mintty.exe可執行文件模仿我的桌面快捷方式的行爲。在cygwin裏面有 – RavB

+1

,期望安裝在哪裏? –