gpt4 book ai didi

java - bashrc echo 来自 jsch 输出流

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:49 29 4
gpt4 key购买 nike

我正在使用以下代码来使用 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 up 2天,1:53,8个用户,平均负载:0.14,0.06,0.06(实际命令输出)

但我希望输出是,

13:15:10 up 2天,1:53,8个用户,平均负载:0.14,0.06,0.06(实际命令输出)

请帮忙!

最佳答案

我假设您不能简单地将 .bashrc 更改为安静。如果您想要隔离命令结果的输出,并忽略之前的任何内容,Exec channel 可能不是您的最佳选择。当您运行该命令时,输出的流将包含所有输出。

您可以尝试使用 shell。您可以连接它并让您的流读取所有初始输出(即“欢迎用户”或 .bashrc 文件中的其他输出)。然后刷新流,然后执行命令并读取流,以仅查看命令本身的输出。

或者,您可以使用channelExec 进行解决。使用channel.setEnv(name, value) 将 PS1 变量设置为包含一些分隔字符串。例如:

channel.setEnv("PS1","Command Starts Here::")

然后,您可以在分隔字符串“Command Starts Here::”上解析提示上的输出

关于java - bashrc echo 来自 jsch 输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16435420/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com