Windows批处理 - 调用Cygwin执行TCL期望脚本

时间:2013-11-25 20:55:04

标签: bash batch-file tcl expect

我正在尝试从Windows服务器使用Cygwin来自动执行一些需要在远程Linux服务器上运行的命令。为了解决这个问题,我构建了一个在Cygwin中运行的expect脚本,用于SSH到Linux服务器并执行相应的命令。

现在,我正试图通过使用批处理脚本包装Cygwin的执行并通过Windows任务计划程序安排它来进一步采用自动化。

我已尝试以下操作从我的批处理脚本中调用Bash:

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

这会导致脚本在出现TCL Expect语言语法时抛出错误。

我也尝试过以下方法从我的批处理脚本中调用Expect:

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

这会导致脚本在我尝试生成SSH时抛出错误

以下是我的Expect脚本的片段:

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

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

spawn ssh perfmet@$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

以下是使用Expect可执行文件启动脚本时的错误消息:

C:\scpbot_reset>scpbot_reset.bat
couldn't execute "ssh": no such file or directory
    while executing
"spawn ssh perfmet@192.168.0.199"
    (file "C:\cygwin64\home\myaccountr\scpbot_reset\reset_script" line 14)

2 个答案:

答案 0 :(得分:3)

首先,真正的期望脚本不能由bash执行。有些人编写的代码混合在bash和expect之间 - 这非常类似Unix,以至于我甚至希望cygwin也有问题 - 但强烈建议你不要这样做。

幸运的是,您的脚本确实是一个真正的期望脚本。因此,应该从cygwin shell调用它:

expect myscript.exp

加上必要的路径。

当你这样做时失败的原因是ssh(可能是ssh.exe)根本没有安装,或者你的PATH上没有。通过安装或修正PATH修复它;你可以比我描述所有可能性更快地找出你需要做的事情。 (当我在Windows上需要可编写脚本的SSH实现时,我个人更喜欢使用PuTTY程序套件中的plink.exe,但这完全取决于你。)

答案 1 :(得分:1)

尝试

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