gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:41:49 24 4
gpt4 key购买 nike

我尝试使用 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());

最佳答案

命令末尾缺少“Enter”(换行符)。

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

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

尽管一般情况下,您不应该使用“shell” channel 来执行命令。使用“exec”命令。
请参阅What is the difference between the 'shell' channel and the 'exec' channel in JSch

查看官方 JSch Exec.java 示例:
http://www.jcraft.com/jsch/examples/Exec.java.html

关于linux - 使用 JSch 执行命令时没有得到任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59918044/

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