我在 Java 中使用 Ganymed ssh lib 连接到 Linux 机器并执行一些 unix 脚本,并显示它们的输出。
我正在运行一个父 shell 脚本,该脚本依次运行其他几个子脚本,最后运行一个 perl 脚本。一切都适用于 shell 脚本,但是当它到达 perl 脚本时,我停止获得任何输出。
如果我在 Linux 服务器上手动运行父脚本,我会看到 perl 的输出没有问题。
这是相关的 java 代码,连接到机器并调用 shell 脚本,并返回一个 BufferedReader,从那里可以逐行读取输出:
try {
conn = new Connection(server);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPublicKey(user, keyfile, keyfilePass);
if (isAuthenticated == false) {
throw new IOException("Authentication failed.");
}
sess = conn.openSession();
if (param == null) {
sess.execCommand(". ./.bash_profile; cd $APP_HOME; ./parent_script.sh");
}
else {...}
InputStream stdout = new StreamGobbler(sess.getStdout());
reader = new BufferedReader(new InputStreamReader(stdout));
} catch (IOException e) {
e.printStackTrace();
}
我调用的父 shell 脚本如下所示:
./start1 #script1 output OK
./start2 #script2 output OK
./start3 #script3 output OK
/u01/app/perl_script.pl # NO OUTPUT HERE :(
谁知道为什么会这样?
蛊毒传说
相关分类