【问题标题】:Executing linux commands from inside java program从java程序内部执行linux命令
【发布时间】:2025-12-24 23:35:10
【问题描述】:

我正在尝试使用 java swing 创建一个 GUI。从那里我必须运行 linux 系统命令。我尝试使用 exec()。但如果字符串包含单引号,则 exec() 函数无法解析该字符串。我使用的代码如下-

Process p = Runtime.getRuntime().exec("cpabe-enc pub_key message.txt '( it_department or ( marketing and manager ) )'")
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

但是当我在"'(" 运行程序时出现错误--语法错误。

我写的时候运行同样的命令

Process p = Runtime.getRuntime().exec("cpabe-enc pub_key message.txt default")

请帮忙。提前感谢您的帮助。

【问题讨论】:

    标签: java shell command-line


    【解决方案1】:

    我最近解决了这种问题。我使用 javaFX 在按钮单击时调用 shell 脚本.. 这与您的摇摆应用场景非常相似...

    这里是链接希望它可以帮助你......

    How to code in java to run unix shell script which use rSync internally in windows environment using cygwin?

    Getting error in calling shell script in windows environment using java code and cygwin...!

    编码愉快... :)

    【讨论】:

      【解决方案2】:

      改为将参数拆分为一个数组,每个参数一个字符串,并使用作为 String[] 的 exec-method 代替,这通常对参数更有效。 大致如下:

      Runtime.getRuntime().exec(new String[] {"cpabe-enc", "pub_key", "message.txt", "( it_department or ( marketing and manager ) )"});
      

      或者不管你的确切参数是什么。

      【讨论】:

        【解决方案3】:

        这是因为运行时不会像您想要的那样将 '(...)' 解释为单个参数。

        尝试改用 ProcessBuilder: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

        【讨论】: