我在unix机器上有一个脚本(script1.sh),它调用其他unix远程机器中的其他脚本(script2.sh):
ssh user@machine /opt/.../script2.sh param1 param2
两台机器之间存在信任关系。
如果我运行script2,它可以正常工作,但是如果我运行script1,它会调用script2但是script2的JAVA_HOME会丢失。我知道我可以通过script2中的“set JAVA_HOME”进行修复,但我更喜欢其他解决方案,我不必在脚本1(script2,script3,...)调用的每个脚本中放置JAVA_HOME的特定路径
有什么想法吗?
问候。
答案 0 :(得分:1)
我没有找到解决方案,所以我尝试了其他方式。另一种方式是Java。
script1调用同一台机器中的Java应用程序。此Java应用程序与其他计算机连接并调用script2并捕获响应。代码是:
//With Try catchs
//Create connection
JSch jSSH = new JSch();
Session session = jSSH.getSession(user, server, port);
UserInfo ui = new SessionUser(password, null);//SessionUser implements UserInfo
session.setUserInfo(ui);
session.setPassword(password);
session.connect();
//Create channel:
Channel channel = session.openChannel("shell");
//Configure inputs and outputs of channel:
OutputStream inputstream_for_the_channel = channel.getOutputStream();
PrintStream commander = new PrintStream(inputstream_for_the_channel, true);
channel.setOutputStream(null);
channel.connect(100);
//Command to execute
commander.println("cd /.../scriptFolder; ./script2.sh param1 param2; exit");
commander.flush();
//System.out.println(channel.getExitStatus());
InputStream outputstream_from_the_channel = channel.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(outputstream_from_the_channel));
String line = null;
//Catch and print the response with a StringBuilder
//close connection
channel.disconnect();
session.disconnect();