如何使用ExpectJ工具在java代码中运行Unix shell脚本?
这是我的hello.sh shell脚本如何使用ExpectJ工具在java代码中运行Unix shell脚本?,java,linux,shell,expect,expectj,Java,Linux,Shell,Expect,Expectj,这是我的hello.sh shell脚本 VALID_NAME="abcd" echo "Name: " read name if [ "$name" == $VALID_NAME ]; then echo "correct" else echo "unexpected input" fi ======================================================== 这是我的Java代码 import java.io.IOException;
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();
}
}
}
======================================================================
这是我的输出
Name://这是它要的水
abcd//这就是我所给予的……什么都没有发生
============================================================
我已经更正了上面的java代码。在您要查找的java代码中
s.expect("VALID_NAME=");
但在Bash代码中,您有:
echo "Name: "
似乎简单地将Java代码更改为以下代码就可以了:
s.expect("Name: ");
我从未使用过ExpectJ,但您的错误消息
sh:hello.sh:没有这样的文件或目录
表明它找不到您的shell脚本。您是否尝试过使用脚本的完整路径
String command = "sh /root/Desktop/hello.sh";
@达胡克:谢谢..我已经做了你们建议的更改,而且很有效..但只是在一定程度上..新的问题是接受输入..但不显示相应的输出..我遗漏了一些非常愚蠢的东西吗?\n这里和那里,也许?@Ingo:\n不是这里的问题。我想我缺少了一些语句。不确定那是什么。s.getCurrentStandardOutContents()返回standard out的内容,但您没有对它做任何处理。如果您尝试System.out.println(s.getCurrentStandardOutContents());,会发生什么@hari似乎需要使用
getCurrentStandardOutContents()
。也很可能是expectClose()
。请参阅:。@darhuuk:我已按照您的建议进行了更改。。但输出没有更改。@hari请参阅DaveHowes在另一个答案中的评论:您向ExpectJ请求字符串,但不要对它做任何处理。如果要显示字符串,请打印它:System.out.println(s.getCurrentStandardOutContents())
@hari如果是那样的话,请投票并接受我的答案。(我相信@DaveHowes也会很感激。)如果ExpectJ和香草Expect一样,你必须发送一份回车:s.send(“abcd\r”)代码>@glenn:我对expect也不太了解。这是我第一次在expectj上工作。不管怎样,我考虑了你的建议,但不幸的是,那没用。。