2

行き詰まっていた問題に新しいアプローチを試みています。私のSSH接続にexpect4jを使用する代わりに(消費者の実行をブロックし、閉鎖の問題を回避する方法を理解できませんでした。知識があり、聖人だと感じている場合は、それに関する詳細について過去の投稿を参照してください)。期待スクリプトを使用してみてください。button.onclick にコード化されたランタイム exec があります。以下を参照してください。終了値が 127 になるのはなぜですか? 私は基本的に、このexpectスクリプトがsshで接続し、expectとsendの単一のセットを実行し、読み出しを提供するだけで済みます...

私は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 を使用するか、スクリプトの上部にある魔法のシバンを利用するシェル コマンドライン (挿入したものにProcess proc = rt.exec( new String [] {"C:\\cygwin\\bin\\bash.exe", "-c", "C:\\scripts\\login.exp"});注意してください) を使用して、期待スクリプトを実行するには bash を使用する必要があります。"-c"または、シバンのみを使用してください。Process proc = rt.exec( new String [] {"C:\\scripts\\login.exp"});

終了値 127 は特別な終了値であり、「コマンドが見つかりません」と通知します。スクリプトには、システム バイナリやシェル ビルトインが存在しない多くの単語が含まれていると予想されるため、これは理にかなっています。

于 2012-08-24T17:34:19.107 に答える