java - bash 命令使用 java process builder 复制文件

标签 java bash processbuilder file-copying

我正在使用以下 java 代码来执行 bash 命令,当尝试复制文件时,该函数返回非零值,但我能够创建文件。

复制命令:cp demo.txt/shared

输出为:127

创建文件命令:echo 'sample text' > demo.txt

输出为:0

public static int run(final String command)  
{
    String[] finalCommand;
    Process process=null;
    int temp=0;

        finalCommand = new String[3];
        finalCommand[0] = "bash";//"/usr/bin/ksh";
        finalCommand[1] = "-c";
        finalCommand[2] = command;

try {
    final ProcessBuilder processBuilder = new ProcessBuilder(finalCommand);
    processBuilder.redirectErrorStream(true);
    process = processBuilder.start();
    temp=process.waitFor();
    } 
    catch (IOException e) 
    { 
    System.out.println( e.getMessage()); 
    } 
    catch (InterruptedException e) { 
    System.out.println(e.getMessage()); 
    }
    return temp;
}

请帮忙

最佳答案

cp 失败和 echo 工作的一种可能性是由于 cp 是外部命令而 echo 是内置命令。

如果设置并导出了 PATH 环境变量,则外部命令只能通过其文件名找到。

但在这种情况下,永远不要依赖 PATH - 使用完整路径名:

String command = "/bin/cp demo.txt /shared";

还有:你有/shared 的写权限吗?

关于java - bash 命令使用 java process builder 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738429/

相关文章:

java - IntentService自己的Thread

java - 如何在Jshell中导入另一个脚本文件

java - 引用 JPanel Action 监听器内部的类

java - 如何通过 GET 调用从 jsp 接收数据

bash - 如何在 Bash 中打印换行符\n?

Bash:变量值中的空格稍后用作参数

linux - 更改大括号样式的 Bash 脚本

java - 从 Java 执行另一个应用程序

java - 从 java ProcessBuilder 启动 Matlab,Matlab 控制台不会出现在 Mac OS 10.8 中

java - 如何使用 Java 中文本字段的用户输入运行 .sh 脚本?