我正在尝试使用Java ProcessBuilder复制图像文件并将其设置为背景,以在Ubuntu上运行Shell脚本。

当自己从终端运行脚本时,它会按预期执行,没有问题。

即./changeBG.sh“ jpg”

但是,当从Java内部运行时,我得到的输出表示该过程已完成,但是在检查文件管理器后,我发现cp永远不会通过,并且在运行下一个更改背景的命令时,我最终以黑色背景显示。

对于为什么不发生cp的线索将不胜感激。

剧本:

#!/bin/bash

mkdir -p /home/$USER/Pictures/Wallpapers

/bin/cp -rf ./images/newimage.$1
/home/$USER/Pictures/Wallpapers/background.$1

gsettings set org.gnome.desktop.background picture-uri "file:///home/$USER/Pictures/Wallpapers/background.$1"

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

最佳答案

您正在添加文字引号,就像您是在shell中编写命令一样。没有人,也没有外壳,因此引号不会进入其中。只需使用

ProcessBuilder bd = new ProcessBuilder("./changeBG.sh", currentIMGext);

07-24 09:49
查看更多