Как запустить сценарий оболочки Unix в коде Java с помощью инструмента ExpectJ? - PullRequest
1 голос
/ 18 апреля 2011

Это мой сценарий оболочки hello.sh

VALID_NAME="abcd"

echo "Name: "

read name

if [ "$name" == $VALID_NAME ]; then

echo "correct"

else

echo "unexpected input"

fi

==============================================================

Это мой код Java

import java.io.IOException;

import expectj.*;

public class Trial {
public static void main(String[] args) {

    ExpectJ exp = new ExpectJ();
    String command = "sh /root/Desktop/hello.sh";
    Spawn s;
    try {
        s = exp.spawn(command);
        s.expect("Name: ");
        s.send("abcd");
        System.out.println(s.getCurrentStandardOutContents());
        s.stop();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TimeoutException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch (ExpectJException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}
}

======================================================================

А это мой ВЫХОД

Имя: // это то, что он просит

abcd // это то, что я даю ... и ничего не происходит

=================================================================

Я исправил свой код Java выше ...

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

В вашем коде Java вы ищете

s.expect("VALID_NAME=");

еще в вашем коде Bash, у вас есть:

echo "Name: "

Кажется, что простое изменение кода Java на следующее должно работать:

s.expect("Name: ");
0 голосов
/ 18 апреля 2011

Я никогда не использовал ExpectJ, но начало вашего сообщения об ошибке sh: hello.sh: No such file or directory говорит о том, что он не может найти ваш скрипт оболочки. Вы пробовали это с полным путем к сценарию?

String command = "sh /root/Desktop/hello.sh";
...