java - 'Echo' linux 命令无法通过 Java 代码运行

原文 标签 java linux jsch

我正在尝试执行一个简单的 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/

相关文章:

linux - 为什么Linux中的iconv无法将UTF-8中的西类牙字符正确转换为ISO-8859-1

linux - echo '字符 - (破折号)在 unix 命令行中

linux - Jsch 和 sudo 命令

java - 如何在Java中编写代码以运行在Windows环境中使用cygwin内部使用rSync的unix shell脚本?

java - 将对象从AsyncThread传递到Fragment类

linux - 在Raspbian Jessie(Pi3)/Linux上可靠地启动PM2

java - 如何使用JSch与子系统NETCONF建立SSH连接

java - 在非AWT线程中更新AbstractTableModel中的数据的最佳实践

java - 如何使用实体管理器和标准在 hibernate 中创建批量更新?

java - 如何强制关闭未关闭的 Jsch ssh 连接