我使用下面的代码来获得使用JSCH库命令的输出,bashrc中回声jsch输出流来
public SSHOutputBean executeCommand(String cmd, int timeOut) {
SSHOutputBean outputBean=new SSHOutputBean();
Channel ch=null;
try {
ch= this.session.openChannel("exec");
ChannelExec chExec= ((ChannelExec) ch);
chExec.setErrStream(System.err);
chExec.setInputStream(null);
chExec.setCommand("reset;"+cmd);
chExec.connect();
outputBean.setInputStream(chExec.getInputStream());
BufferedReader brInput = new BufferedReader(new InputStreamReader(outputBean.getInputStream()));
outputBean.setErrorStream(chExec.getErrStream());
BufferedReader brError = new BufferedReader(new InputStreamReader(outputBean.getErrorStream()));
while (true) {
try {
String result = brInput.readLine();
if (result == null)
break;
outputBean.getOutput().append(result+"\n");
} catch (Exception ex) {
ex.printStackTrace();
break;
}
}
while (true) {
try {
String result = brError.readLine();
if (result == null)
break;
outputBean.getError().append(result+"\n");
} catch (Exception ex) {
ex.printStackTrace();
break;
}
}
if (chExec.isClosed()) {
outputBean.setExitStatus(chExec.getExitStatus());
}
chExec.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSchException e){
e.printStackTrace();
}
finally
{
if(ch!=null)
ch.disconnect();
}
return outputBean;
}
的问题是,如果客户端上的.bashrc文件打印的东西在控制台上,然后每次我打开一个ChannelExec并运行一个命令;在命令执行时给出的输出包含命令的输出以及bashrc输出。我只想输出命令而不是打印bashrc。
例如,
如果我已经把下面的代码在.bashrc文件
回声 “欢迎用户”
和如果我运行命令使用jsch,
SSHOutputBean sshOutputBean = ssh.executeCommand( “正常运行时间”);
然后输出是,
欢迎用户(.bashrc中输出)
13时15分10秒达2天1:53,8个用户,平均负载:0.14,0.06, 0.06(实际命令输出)
但我想输出是,
十三点15分10秒达2天1:53,8个用户,平均负载:0.14,0.06,0.06(实际指令输出)
请帮忙!
嘿感谢很多关于这样一个清晰的答案。我也尝试过使用shell,它会打印一次.bashrc输出,但它还会打印每个命令的 [username @ hostname] $命令 。 解决方法非常好,但是我已经拥有了另一个在执行命令之前回显一个字符串的地方,然后使用此字符串作为分隔符。我正在寻找一些具体的解决方案,我们可以使用一些JSCH选项来执行所需的操作。 非常感谢。 – 2013-05-09 07:51:48
[username @ hostname] $听起来像一个提示。这些由PS1,PS2,PS3和PS4环境变量控制。您可以使用setEnv删除您的频道提示(使用exec或shell)。回声是一个很好的简单工作。我不认为你会找到内置的东西来解决这个问题,因为这个问题的本质 - 通道有一个输出流,你的服务器正在向它发送输出。你可以在服务器端静默它,或者在客户端进行解析/过滤。也许PaŭloEbermann会用一些绝密的jsch功能来加入:) – Damienknight 2013-05-09 15:04:45
非常感谢回复。是的,似乎没有其他选项可以回显,然后在服务器端执行解析器。 – 2013-05-13 06:43:10