java - 无法从 Java 程序执行 shell 脚本

标签 java linux shell

我有一个在 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/

相关文章:

java - 将 Map<T> 转换为派生类

java - 规则 : Null pointers should not be dereferenced 上的 Sonar 误报

Python 子进程管道 block

bash - Bash 中单引号和双引号的区别

linux - 有没有办法在 posix shell 或 bash 中扇出流?

python - 有好的 Python GUI shell 吗?

java - 当一个 XSLT 导入另一个 XSLT 时出现 MalformedURLException

java - Android Studio-Java.exe 以非零退出值 2 完成

c++ - 如何在 Linux 中使用 c 获取系统代理设置

sql - sqlite3的最大表数