我不得不将文件从一个位置移动到另一个位置并运行名为“Irel_Wrapper”的脚本
在putty我做了/ home / location mv filename。
所以在Java中我使用了channel(Exec),我能够执行上面的场景,即移动文件,因为“mv”命令是一个putty命令。
但我无法运行脚本Irel_Wrapper(我的猜测是因为它不是一个putty本机命令,我无法在带有channel(Exec)的java中执行此操作。
我基本上需要用cd命令打开一个位置并运行irel_wrapper脚本。我尝试了一种方法,但我无法实现它。 我得到的错误:找不到Ksh Irel。
我的代码:
public ArrayList<String> deployIrelWrapper() throws JSchException, IOException {
ConnectAndCreateSession();
String GrepComandConsole = null;
StringBuilder sb = new StringBuilder();
Channel channel1 = session.openChannel("exec");
String command = "cd /pre/d02/pinDap75a/opt/ifw/vf/cdr/p3/out/irel && irel_wrapper";
BufferedReader br = null;
java.io.InputStream in = channel1.getInputStream();
((ChannelExec) channel1).setCommand(command);
((ChannelExec) channel1).setErrStream(System.err);
System.out.println("Connect to Channel...");
channel1.connect();
System.out.println("****Channel Connected****");
System.out.println();
String line;
try {
br = new BufferedReader(new InputStreamReader(in));
while ((line = br.readLine()) != null) {
sb.append(line + " ");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ArrayList<String> ResultSet = new ArrayList<>();
ArrayList<String> ResultSetOutput = new ArrayList<>();
System.out.println("Expected output");
String words = sb.toString();
String[] result = words.split(" ");
for (String ss : result) {
ResultSet.add(ss);
}
for (int i = 0; i < ResultSet.size(); i++) {
GrepComandConsole = ResultSet.toArray()[i].toString();
ResultSetOutput.add(ResultSet.toArray()[i].toString());
System.out.println(ResultSetOutput);
}
channel1.disconnect();
session.disconnect();
return ResultSetOutput;
}
请不要将此问题重复。 我能够执行像mv命令cd ..或SFTP传输的命令..但是在用CD命令打开路径后执行脚本我无法得到它。我正在使用Jsch lib。
如何手动完成:
我登录了腻子
打开路径:cd home / apt / cdr / irel /
运行irel_wrapper:irel_wrapper
然后列出一些其他细节将填充,如GSM3A,Voic,NET3B等。
下一个最终命令:irel_wrapper GSM3A
这是我们如何通过putty手动完成它,我尝试使用java和Jsch自动化它。 SO SFTP和其他简单的命令,如mv和ls我能够实现..除了这个Irel包装..但是当我手动完成它的工作正常。因此我认为没有拼写错误..
答案 0 :(得分:0)
问题是ssh连接默认情况下不启动shell。为了在shell中执行脚本,您需要启动终端。
Channel channel = session.openChannel("shell");
你将它作为“exec”启动,它只允许你运行程序,而不是shell脚本。有关它们之间差异的更多信息,请参见此处:
What is the difference between the 'shell' channel and the 'exec' channel in JSch
抱歉,你搜索了这么久。节日快乐。