我正在尝试执行一个简单的linux命令,通过我的java代码将一些文本附加到远程服务器中的文件中。但它不起作用。当我在 linux 盒子中运行相同的命令时,它工作正常。
try {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session sessionwrite = jsch.getSession(user2, host2, 22);
sessionwrite.setPassword(password2);
sessionwrite.setConfig(config);
sessionwrite.connect();
System.out.println("Connected");
Channel channel = sessionwrite.openChannel("exec");
BufferedReader in = new BufferedReader(new InputStreamReader(
channel.getInputStream()));
String command = "echo \"hello\" >> welcome.txt";
((ChannelExec) channel).setCommand(command);
System.out.println("done");
}
最佳答案
Channel channel = sessionwrite.openChannel("exec");
BufferedReader in = new BufferedReader(new InputStreamReader(
channel.getInputStream()));
String command = "echo \"hello\" >> welcome.txt";
((ChannelExec) channel).setCommand(command);
System.out.println("done");
您错过了 channel.connect()
的电话。 connect()
是实际向远程服务器发送请求以调用命令的方法。您还应该调用channel.disconnect()
当完成 channel 时终止它。您的代码可能如下所示:
Channel channel = sessionwrite.openChannel("exec");
BufferedReader in = new BufferedReader(new InputStreamReader(
channel.getInputStream()));
String command = "echo \"hello\" >> welcome.txt";
((ChannelExec) channel).setCommand(command);
channel.connect();
channel.disconnect();
System.out.println("done");
我要补充一点,在这个特定的示例中,没有理由在 exec channel 的标准输入上打开输入流,因此您可以忽略该行。
关于java - “Echo”linux 命令无法通过 Java 代码运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38986408/