我有一个在 Linux 上运行的 java 程序,并尝试调用一个 shell 脚本。此 shell 脚本尝试将本地目录复制到另一台服务器。调用脚本的方法是:
bash copy_logs.sh "TestResults/07232015042652"
当我从 Linux 终端调用它时,目录被成功复制到远程服务器。现在我想从 Java 程序执行这个。我的代码片段如下:
Sting direc = "07232015042652"
p = Runtime.getRuntime().exec("bash copy_logs.sh \"TestResults/"+direc+"\"");
当我运行此命令时,虽然我没有收到任何错误或异常,但文件永远不会被复制。
copy_logs.sh内容如下:
scp -r $TS test@192.168.199.57:/home/apacheweb/html/Weekly_Status/prov_check/
if [ $? -eq 0 ]
then
echo "File copied successfully"
else
echo "Failed to copy"
我尝试通过
打印执行结果InputStream is = p.getInputStream();
StringBuilder sb = new StringBuilder();
int i=0;
try {
while ((i=is.read())!=-1){
sb.append((char)i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sb);
我得到输出:复制失败。只是想知道这可能是什么根本原因???
最佳答案
让它工作:
ProcessBuilder pb = new ProcessBuilder("bash", "-c", "/bin/bash copy_logs.sh \"TestResults/"+directoryName+"\"");
Process shell = pb.start();
关于java - 无法从 Java 程序执行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713380/