使用JSch执行命令时没有得到任何输出

时间:2015-08-05 22:58:55

标签: linux shell ssh jsch

我正在尝试使用JSch首先在远程系统中执行sudo su - user命令,然后连续执行管道shell命令。我想将命令输出读入String。我怎样才能做到这一点?我正在尝试这样的东西,但无法获得任何输出。请指教。

session = getSession();
channel = (ChannelShell)session.openChannel( "shell" );
String sudoCommand = "sudo su - " + sudoAs;
String nextCommand = "ps -eaf | grep user | wc -l";
pipeIn = new PipedInputStream();
pipeOut = new PipedOutputStream( pipeIn );
channel.setInputStream(pipeIn);
channel.setOutputStream(System.out, true);
channel.connect(3*1000);
pipeOut.write(sudoCommand.getBytes());
Thread.sleep(1000);
pipeOut.write(nextCommand.getBytes());

1 个答案:

答案 0 :(得分:1)

你缺席"输入" (命令末尾的(换行)。

所以他们实际上从不执行,这就是为什么你无法获得任何输出。

String sudoCommand = "sudo su - " + sudoAs + "\n";
String nextCommand = "ps -eaf | grep user | wc -l\n";

然后在阅读其输出流时跟随任何JSch示例 例如:http://www.jcraft.com/jsch/examples/Exec.java.html