我试图用脚本运行应用程序

时间:2017-04-04 10:25:40

标签: bash cmd cygwin expect

我在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

1 个答案:

答案 0 :(得分:0)

我在你的问题中发现了两个问题:

  1. 如何在cygwin / bash中执行批处理文件?

  2. 如何预期在cygwin / bash中安装/运行?

  3. <强> 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
    
    $
    

    好吧,它似乎有效。