我在Windows上有一个需要用户名和密码启动的应用程序,但我不希望用户输入用户/密码,所以我创建了一个脚本来与CMD界面交互以输入密码,在Windows 8.1上的cygwin,但是我无法在Cygwin上找到expect命令,我想问一下我的脚本是否有任何问题。 下面是脚本
#!/usr/bin/expect
sh C:\Users\Osama.Barakat\Desktop\batchfile.bat
expect "Enter the password for administrator:"
send "Pa$$w0rd"
interact
答案 0 :(得分:0)
我在你的问题中发现了两个问题:
如何在cygwin / bash中执行批处理文件?
如何预期在cygwin / bash中安装/运行?
<强> 1。如何在cygwin / bash中执行批处理文件?
在您的示例代码中,我找到了
---8<---
sh C:\Users\Osama.Barakat\Desktop\batchfile.bat
--->8---
恕我直言,这是一个错误。我相信无论脚本文件扩展名如何,bash
都会尝试以脚本的形式执行任何操作。但如果batchfile.bat
确实是一个批处理文件,那么应该使用正确的解释器(即cmd.exe
)来调用它。
我试过看看cygwin bash
中是否有任何问题,但它有效。我的样本批处理文件test-expect.bat
:
@echo off
rem output
echo Hello %USERNAME%
rem input
set /p INPUT= Enter input:
rem output
echo Input: %INPUT%
...在bash
上对cygwin进行了测试:
$ cmd /c test-expect.bat
Hello Scheff
Enter input: Hello cmd
Input: Hello cmd
$
好的,完成了。
<强> 2。如何在cygwin / bash中安装/运行预期?
要在cygwin上安装expect
,我搜索了一下,发现Installation of Cygwin, expect and Ssh。然后,我启动了cygwin-setup setup-x86.exe
并尝试了其他方法:
在“选择套餐”页面上,我将View
设置为Full
,将Search
设置为expect
。我得到了四个条目的列表,其中第一个是:“expect:自动化交互式应用程序的工具”(类别:Tcl)。我选择这个用于安装,并且必须确认另一个包作为依赖。
安装完成后,我在交互式bash中尝试了这个:
$ which expect
/usr/bin/expect
$
好的 - 看起来很不错。
结合CMD.EXE和期望
总而言之,我写了另一个测试脚本test-expect.exp
:
#!/usr/bin/expect
spawn cmd /c test-expect.bat
expect "Enter input: "
send "Hello expect\r"
interact
在cygwin上的bash中测试过:
$ ./test-expect.exp
spawn cmd /c test-expect.bat
Hello Scheff
Enter input: Hello expect
Input: Hello expect
$
好吧,它似乎有效。