检查ProcessBuilder的参数是否是有效命令

时间:2013-02-05 00:47:54

标签: java process clojure

我正在使用Clojure库来简化我的项目的子进程管理。它基本上以更Clojuric的方式包装Java的ProcessBuilder。我想做的一件事是捕获任何缺少的命令 - 也就是说,如果用户想要使用this-command-not-found作为shell命令,我的代码应该抛出异常。

看起来这对ProcessBuilder来说很难或不可能。我是否需要以某种方式获取用户$PATH并在那里搜索以检查有效命令,还是有更好的方法?

编辑:这应该在没有的情况下完成 - 请参阅下面的评论。

3 个答案:

答案 0 :(得分:2)

是的,当然有一种比搜索$PATH更好的方法:只需运行用户要求您运行的命令。使用ProcessBuilder或任何其他机制都无法实现更智能的解决方案,因为用户可以使用的shell集是开放式的,并且不要求他们的shell甚至具有$PATH的概念供您搜索。您所能做的就是尽力做到用户想要的,如果发生错误,请让他们知道。

答案 1 :(得分:0)

您从Process获得ProcessBuilder.start()

然后您可以从Process.getErrorStream()阅读并在Windows下查看

'this-command-not-found' is not recognized as an internal or external command, operable program or batch file.

答案 2 :(得分:0)

您可以使用ProcessBuilder执行which命令来了解命令是否存在。这需要which出现在系统上。