Linux cp 命令在 Java ProcessBuilder 中不起作用
Linux cp command not working from within Java ProcessBuilder
我正在尝试复制图像文件并使用 Java ProcessBuilder 将其设置为背景 运行 shell 脚本 Ubuntu。
当运行自己从终端运行脚本时,它按预期执行没有问题。
即./changeBG.sh "jpg"
然而,当 运行ning 从内部 Java 我得到输出说进程已经完成,但是在检查文件管理器时我发现 cp 从未通过,我最终得到一个运行下一个更改背景的命令时为黑色背景。
如能提供有关 cp 为何未发生的线索,我们将不胜感激。
脚本:
#!/bin/bash
mkdir -p /home/$USER/Pictures/Wallpapers
/bin/cp -rf ./images/newimage.
/home/$USER/Pictures/Wallpapers/background.
gsettings set org.gnome.desktop.background picture-uri "file:///home/$USER/Pictures/Wallpapers/background."
echo done
Java代码:
try {
String cmd= "./changeBG.sh \"" + currentIMGext + "\"" ;
System.out.println(cmd);
ProcessBuilder bd = new ProcessBuilder(cmd.split(" "));
Process ps = bd.start();
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
String currentLine;
while (true) {
currentLine = br.readLine();
if (currentLine == null) {
break;
}
System.out.println(currentLine);
}
} catch (Exception e2){
e2.printStackTrace();
}
Java 输出:
./changeBG.sh "jpg"
done
您的文件“./changeBG.sh”不是操作系统意义上的可执行文件,它只是一个由bash
解释的文本文件。所以你应该使用 /bin/bash path/to/changeBG.sh args
作为你的字符串 cmd
.
检查 Posix' exec(3)
您正在添加文字引号,就好像您是在 shell 中编写命令的人一样。没有人也没有 shell,所以引号不进入其中。只需使用
ProcessBuilder bd = new ProcessBuilder("./changeBG.sh", currentIMGext);
我正在尝试复制图像文件并使用 Java ProcessBuilder 将其设置为背景 运行 shell 脚本 Ubuntu。
当运行自己从终端运行脚本时,它按预期执行没有问题。
即./changeBG.sh "jpg"
然而,当 运行ning 从内部 Java 我得到输出说进程已经完成,但是在检查文件管理器时我发现 cp 从未通过,我最终得到一个运行下一个更改背景的命令时为黑色背景。
如能提供有关 cp 为何未发生的线索,我们将不胜感激。
脚本:
#!/bin/bash
mkdir -p /home/$USER/Pictures/Wallpapers
/bin/cp -rf ./images/newimage.
/home/$USER/Pictures/Wallpapers/background.
gsettings set org.gnome.desktop.background picture-uri "file:///home/$USER/Pictures/Wallpapers/background."
echo done
Java代码:
try {
String cmd= "./changeBG.sh \"" + currentIMGext + "\"" ;
System.out.println(cmd);
ProcessBuilder bd = new ProcessBuilder(cmd.split(" "));
Process ps = bd.start();
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
String currentLine;
while (true) {
currentLine = br.readLine();
if (currentLine == null) {
break;
}
System.out.println(currentLine);
}
} catch (Exception e2){
e2.printStackTrace();
}
Java 输出:
./changeBG.sh "jpg"
done
您的文件“./changeBG.sh”不是操作系统意义上的可执行文件,它只是一个由bash
解释的文本文件。所以你应该使用 /bin/bash path/to/changeBG.sh args
作为你的字符串 cmd
.
检查 Posix' exec(3)
您正在添加文字引号,就好像您是在 shell 中编写命令的人一样。没有人也没有 shell,所以引号不进入其中。只需使用
ProcessBuilder bd = new ProcessBuilder("./changeBG.sh", currentIMGext);