我正在尝试从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)
答案 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"