[java]java调用shell命令

307 阅读1分钟

先放一个正确示例:

File localRootDir = new File(FileUtils.getTempDirectoryPath());
String basePath = localRootDir.getParent() + File.separator + "gitRoot" + File.separator + UUID.randomUUID().toString() + File.separator;
File dir = new File(basePath);
dir.mkdirs();

Process process =null;
process = Runtime.getRuntime().exec("git init",null,dir);
process.waitFor();

process = Runtime.getRuntime().exec("git remote add -f origin git@code.com.cn:mobile-center-hippius/ui-template.git",null,dir);
process.waitFor();

process = Runtime.getRuntime().exec("cmd.exe /c start-ssh-agent",null,dir);
process.waitFor();
  1. Runtime.getRuntime().exec(String command)和exec(String command, String[] envp, File dir)的区别在于,后者指定了执行的工作目录
  2. 多个命令要分开来执行,Runtime.getRuntime().exec(String[] commandArray)的作用与传单条命令一样,exec("git init")相当于exec(new String[]{"git","init"}),单条只不过会用分词器处理成array
  3. process.waitFor() 是必须的,会等到线程执行完,最后一条命令也需要加这个
  4. 如果想要执行cd 、pwd 、ls 等path下的exe命令(path下的其他命令也需要,包括path下配置的git、maven等),需要这样写:exec("cmd.exe /c cd E:\\MinGW"),一定要加 /c 否则会卡住

参考:www.cnblogs.com/fclbky/p/61…