我使用下面的代碼來獲得使用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