【发布时间】:2016-01-27 20:08:03
【问题描述】:
我正在尝试运行一个程序,该程序使用 Unix 中的 jcraft 库处理来自窗口的文件。我在建立频道后发现它总是尝试在主目录中运行程序,但我需要在单独的目录中运行。请看看我到目前为止尝试了什么,让我知道我缺少什么。
String strRemoteDir = "/home/process/input" 频道 = session.openChannel("sftp");
channel.connect();
System.out.println("sftp channel opened and connected.");
channelSftp = (ChannelSftp) channel;
// Printing Home Directory in Unix Server
System.out.println(channelSftp.getHome());
channelSftp.cd(strRemoteDir);
System.out.println(channelSftp.pwd());
// for uploading a file where i need to run the program
File f = new File(fileName);
channelSftp.put(new FileInputStream(f), f.getName());
System.out.println("File transfered successfully to host.");
fileTransfer = true;
channel=session.openChannel("exec");
InputStream in=channel.getInputStream();
// it is printing the desired directory where i want to go
System.out.println(channelSftp.pwd());
((ChannelExec)channel).setCommand("sh process.ksh "a.txt");
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
channel.connect();
输出:找不到 process.ksh
但是通过腻子我能够运行该程序。只是为了让您知道 process.ksh 不在输入目录中,但可以在任何地方使用参数运行。 ((ChannelExec)channel).setcommand("ls") 打印出主目录中的所有文件。我相信我正在建立一个到主目录的通道,我只是不知道如何在所需位置使用 jcraft 运行 bash 程序。请让我知道我缺少什么或者是否有可能实现它。
提前致谢。 努尔
【问题讨论】:
-
似乎 execChannel 没有“当前目录”的概念,因此您可能需要指定 process.ksh 的完整绝对路径。如果这对当前目录有特定要求,它应该设置目录本身。 epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/…
-
如果我使用 ksh 文件的绝对路径并尝试执行,它会返回另一个错误,因为参数文件不存在。为了简单起见,我在脚本目录中有脚本,在数据目录中有数据。我想使用未发生的参数在数据目录中运行 ksh 程序。我能够使用附加命令更改目录仍然没有运气。有什么特殊的命令可以运行 ksh 程序吗?