我想通过java执行shell命令,并尝试使用processbuilder.class和process.class:
public Process createProcess() throws IOException
{
List<String> cmds = new ArrayList<>();
cmds.add("start_date=\"2021-07-04\" && echo \"Starting with startdate=$start_date\"");
return (new ProcessBuilder(cmds)).start();
}
当我在shell上执行完全相同的命令时,它就工作了。在java中执行此操作时,我得到:
java.io.ioexception:无法运行程序“start_date=“2021-06-10”(短路…):错误=2,没有这样的文件或目录
(我还通过直接输入日期,在没有变量start_date的情况下进行了尝试)
为什么不起作用?我是否可以配置java知道这不是一个文件等。?
2条答案
按热度按时间lawou6xi1#
您可以在单独的.sh文件中编写脚本,并传递文件路径和脚本执行所需的任何参数(此处可能需要传递startdate)
然后您可以按如下方式执行它
fykwrbwg2#
唯一允许命令作为单个字符串的java方法是一些runtime.exec方法。正如sanjeevrm所指出的,您需要显式地调用一个shell来解释shell语法,如
&&
及>&
以及shell变量的使用。然而,你不需要这些东西。java可以做到这一切。