【问题标题】:What is the right command format for Java ProcessBuilder sudo bash command?Java ProcessBuilder sudo bash 命令的正确命令格式是什么?
【发布时间】:2014-02-17 03:44:59
【问题描述】:

如何从 Java ProcessBuilder 执行这样的命令(使用 sudo)? (我不需要包含密码,因为普通用户有权在没有密码的情况下以 root 身份运行 myscript.log。)

sudo bash /home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1

我的问题是如何将这个命令的元素传递到 Java 的 ProcessBuilder 的构造函数中?

例如,“sudo”是ProcessBuilder ctor 的第一个参数、最后一个参数,还是其他地方?你怎么知道它们去了哪里以及命令的哪些元素成为ProcessBuilder的参数?

【问题讨论】:

    标签: java bash sudo


    【解决方案1】:

    这里的问题是重定向没有在您调用的 bash 命令中执行。

    尝试使用 bash 的 -c 选项传递命令以作为字符串执行:

    sudo bash -c "/home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1"
    

    为了在这个命令中使用 java ProcessBuilder,我会尝试像这样构造它:

    new ProcessBuilder("sudo", "bash", "-c", "/home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1");
    

    通过使用 ProcessBuilder,您基本上要求它执行命令 sudo 并为其提供 3 个参数。作为回报,sudo 会像这样调用你的命令:bash -c "..."

    当进程提示输入 sudo 密码时,您可能仍然遇到问题。

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2017-04-30
      • 2017-06-29
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多