2

我正在尝试一种新方法来解决我一直卡住的问题。而不是使用 expect4j 进行我的 SSH 连接,(我想不出阻止消费者运行和关闭问题的方法,如果你知识渊博并且感觉圣洁,请参阅过去的帖子以获取更多信息,)我要去尝试使用期望脚本。我有一个运行时 exec 编码到 button.onclick,见下文。为什么我得到 127 退出值?我基本上只需要这个expect脚本来ssh,运行一组expect并发送,给我读数,就是这样......

我正在使用cygwin。不确定这是否与为什么这不起作用有关……我的 sh-bang 线是否指向正确的位置?我的 cygwin 安装是完整安装,所有软件包都在 C:\cygwin 中。

为什么我得到 127 退出值而不是从我的服务器读取,我该如何缓解这种情况?

try
    {            
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec( new String [] {"C:\\cygwin\\bin\\bash.exe", "C:\\scripts\\login.exp"});
        InputStream stdin = proc.getInputStream();
        InputStreamReader isr = new InputStreamReader(stdin);
        BufferedReader br = new BufferedReader(isr);
        String line = null;
        System.out.println("<OUTPUT>");
        while ( (line = br.readLine()) != null)
            System.out.println(line);
        System.out.println("</OUTPUT>");
        int exitVal = proc.waitFor();            
        System.out.println("Process exitValue: " + exitVal);
    } catch (Throwable t)
      {
        t.printStackTrace();
      }







#!/usr/bin/expect -f
spawn ssh userid@xxx.xxx.xxx.xxx password
match_max 100000
expect "/r/nDestination: "
send -- "xxxxxx\r"
expect eof
4

1 回答 1

4

问题是您使用 bash 来执行期望脚本。您需要使用expect 来执行一个expect 脚本,或者bash 来通过一个shell 命令行来执行一个expect 脚本(即Process proc = rt.exec( new String [] {"C:\\cygwin\\bin\\bash.exe", "-c", "C:\\scripts\\login.exp"});,注意"-c"我插入的那个),它利用了脚本顶部的魔法shebang。或者更好,只使用shebang:Process proc = rt.exec( new String [] {"C:\\scripts\\login.exp"});

退出值 127 是一个特殊的退出值,它告诉您“找不到命令”。这是有道理的,因为您期望脚本包含许多不存在系统二进制文件或 shell 内置程序的单词。

于 2012-08-24T17:34:19.107 回答