0

我知道这有点具体,我需要通过将问题分成子问题来找到答案。但我想知道做同样事情的最佳方法。

我有一个 linux 服务器,我有自己的登录名。linux服务器上存储了一些TCL脚本。我想编写一个我将从我的 Windows 机器调用的 java 程序,一旦我提供我的登录名、密码和主机名,它应该连接到 linux 服务器,并且应该从存储脚本的目录中执行脚本。

我尝试的是(在网上找到)如下。这样,连接和执行诸如“ls”之类的简单命令需要花费大量时间。此外,为了运行脚本,我需要设置一些我能够设置的环境变量,但即使在我授予脚本执行权限后我也无法执行脚本。

static String executeCommand(Session session, String command)

            throws Exception {
        ChannelExec channel = (ChannelExec) session.openChannel("exec");
        channel.setCommand(command);
        channel.setInputStream(null);
        channel.setErrStream(System.err);
        channel.connect();

        InputStream in = channel.getInputStream();

        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line;
        StringBuffer sb = new StringBuffer();
        while ((line = br.readLine()) != null) {
                sb.append(line + '\n');
        }
        channel.disconnect();

        return sb.toString();
    }

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    // TODO add your handling code here:

    try {
                JSch jsch = new JSch();
                System.out.println("Logging in");

            Session session = jsch.getSession("login name", "host name", port);

            session.setPassword("password");

                java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            session.connect();
            System.out.println("Logged in");

            System.out.println("==>" + executeCommand(session, "ls"));

        //System.out.println("==>" + executeCommand(session, "./first"));   

            Thread.sleep(60000);

            session.disconnect();
                System.out.println("Disconnected");  
        } catch (Exception e) {
            e.printStackTrace();
        }

} 

shell脚本“first”只有下面一行

echo "First Script"
sh testscripts/assignment1.scr

如果我从 SSH 终端运行相同的脚本,我会得到所需的输出,并且 TCL 脚本运行正确。但是,如果我尝试从程序中运行它,我将无法运行它并且它会给出错误

testscripts/assignment1.scr:第 3 行:/bin/tclsh:没有这样的文件或目录
testscripts/assignment1.scr:第 3 行:exec:/bin/tclsh:无法执行:没有这样的文件或目录
4

0 回答 0