我正在尝试一种新的方法来解决我遇到的难题。我将尝试使用expect4j脚本,而不是使用expect4j作为我的ssh连接(我想不出一种方法来阻止使用者运行和闭包问题,如果你有知识并且感觉很圣洁的话,请参阅过去的文章以获得更多信息)。我在一个button.onclick中编写了一个运行时exec,见下文。为什么我得到127出口值?我基本上只需要这个expect脚本来ssh,运行一组expect和send,给我读数,就这样。。。
我在用cygwin。不确定这是否与为什么这不起作用有关…我的shbang线指向正确的地方了吗?我的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
1条答案
按热度按时间prdp8dxp1#
问题是您使用bash来执行expect脚本。您需要使用expect来执行expect脚本,或者使用bash通过shell命令行来执行expect脚本(即
Process proc = rt.exec( new String [] {"C:\\cygwin\\bin\\bash.exe", "-c", "C:\\scripts\\login.exp"});
,注意"-c"
我已经插入)它利用了你剧本顶部的魔法。或者更好,只使用shebang:Process proc = rt.exec( new String [] {"C:\\scripts\\login.exp"});
exit值127是一个特殊的exit值,它告诉您“command not found”。这是有意义的,因为您期望脚本包含许多没有系统二进制文件或shell内置的单词。